PHP XPath — проблемы с чтением атрибутов узла с помощью & quot; оценивать & quot;

Мне нужно прочитать атрибуты «id», но я получаю либо пустые строки, либо строку, содержащую «one» в зависимости от используемого выражения XPath.

Я намеренно использую метод «query», чтобы получить 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

Решение

в foreach вы уже на MEMBER контекст, так что вместо /MEMBER/@id использовать только @id надеюсь, вы получите желаемое.

На самом деле в foreach ($members as $member) есть два <MEMBER id="one" /> а также <MEMBER id="two" /> будет контекст, чтобы вы уже на MEMBER элемент, который вам просто нужно выбрать @id из текущего контекста.

Если вы будете печатать $member тогда вы будете знать, что хранится в этом контексте, тогда картина будет ясна.

Пожалуйста, примите ответ, если он работает для вас ..

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector