PHP XPath - проблемы с чтением атрибутов узла с помощью «оценки» - PullRequest
0 голосов
/ 18 декабря 2018

Мне нужно прочитать атрибуты "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
}

1 Ответ

0 голосов
/ 18 декабря 2018

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...