[英]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),为什么这没有按预期工作?
额外说明:
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.