繁体   English   中英

这个 xPath 查询应该返回一个数组还是 PHP 中的单个值?

[英]Should this xPath query be returning an array, or a single value in PHP?

我对 xPath 有疑问,它的行为与我预期的不同,尽管我可能会预料到有问题!

所以我想问一下为什么我用来从属性值设置 PHP 变量的以下行返回一个数组,在我得到值之前有几个级别,而不是值的字符串。

我的 XML 文件的开头是这样的:

<?xml version="1.0" encoding="UTF-8"?>
<ReaderDetails updated="16/12/2020 10:33:02">

我想将 'updated' 的值作为字符串获取,并设置为一个变量,我相信我可以使用它来做到这一点:

$updated = simplexml_load_string(file_get_contents($xml), null, true)->xpath('//ReaderDetails/@updated');

但是,在NetBeans中调试时,我从变量中得到的结果是一个嵌套数组,里面有属性名和值:

在此处输入图像描述

有人可以帮助我的 PHP 变量行(尤其是 Xpath),为什么这没有按预期工作?

额外说明:

  1. 只有一个ReaderDetails节点

SimpleXMLElement::xpath()将始终返回 SimpleXMLElement 实例的数组。 如果您的表达式匹配的不是元素节点,它仍然会模拟一个可以转换为字符串的值。

$xml = <<<'XML'
<ReaderDetails updated="16/12/2020 10:33:02"/>
XML;

$updated = simplexml_load_string($xml, null, true)->xpath('//ReaderDetails/@updated');
var_dump((string)$updated[0]);
var_dump($updated);

Output:

string(19) "16/12/2020 10:33:02"
array(1) {
  [0]=>
  object(SimpleXMLElement)#2 (1) {
    ["@attributes"]=>
    array(1) {
      ["updated"]=>
      string(19) "16/12/2020 10:33:02"
    }
  }
}

DOMXpath::evaluate()能够直接返回标量值 - 取决于 xpath 表达式:

$xml = <<<'XML'
<ReaderDetails updated="16/12/2020 10:33:02"/>
XML;

$document = new DOMDocument();
$document->loadXML($xml);
$xpath = new DOMXpath($document);

$nodeList = $xpath->evaluate('//ReaderDetails/@updated');
var_dump(get_class($nodeList));
var_dump(get_class($nodeList[0]));
$nodeContent = $xpath->evaluate('string(//ReaderDetails/@updated)');
var_dump($nodeContent);

Output:

string(11) "DOMNodeList"
string(7) "DOMAttr"
string(19) "16/12/2020 10:33:02"

我只是偶然发现了一个解决此问题的答案,方法是在设置变量后将其设置为字符串。

$updated = simplexml_load_string(file_get_contents($xml), null, true)->xpath('//ReaderDetails/@updated')[0];
$updated = (string) $updated;

现在,这会将变量作为字符串返回,其中包含属性的日期和时间值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM