我需要读取“ id”属性,但是我会得到空字符串或包含“ one”的字符串,具体取决于所使用的XPath表达式。
我故意使用“查询”方法来获取带有节点的DOMNodeList,然后我想使用它们。请检查以下代码:
<?php
$xml = '
<ROOT>
<MEMBER id="one" />
<MEMBER id="two" />
</ROOT>
';
$dom = new \DOMDocument('1.0', 'utf-8');
$dom->loadXML($xml);
$xpath = new DOMXpath($dom);
$members = $xpath->query('/ROOT/MEMBER'); // object of class DOMNodeList
foreach ($members as $member) {
echo($dom->saveXML($member)); // displays <MEMBER id="one"/> and <MEMBER id="two"/> as expected
$id = $xpath->evaluate('string(/MEMBER/@id)', $member); // let's read the id attribute
var_dump($id); // returns string(0) "" in both cases - how come?
$id = $xpath->evaluate('string(//MEMBER/@id)', $member); // should make no difference
var_dump($id); // string(3) "one" in both cases
}
答案 0 :(得分:0)
在foreach中,您已经在MEMBER
上下文中,因此不要使用/MEMBER/@id
而不是@id
,希望您将获得期望的输出。
实际上,在foreach ($members as $member)
中有两个<MEMBER id="one" />
,<MEMBER id="two" />
是上下文,因此您已经在MEMBER
元素上,只需要从当前上下文中选择@id
如果您将打印$member
,那么您将知道在此上下文中存储的内容,那么图片将是清晰的。
如果对您有用,请接受答案。