Я хотел бы спросить, почему узел запроса «команды» может дать мне некоторые результаты (count = 1, length = 1), но не «root» или «subteam». Все узлы «root, команды и subteam» относятся к типу Nodelist.
Если я не ошибаюсь, счет 1 представляет номер узла в списке … так почему «root» и «subteam» возвращают 0.
$dom = new DomDocument();
$string = <<<XML
<?xml version='1.0'?>
<root>
<teams>
<subteams>
<cmd>login</cmd>
<login>Richard</login>
</subteams>
</teams>
</root>
XML;
$dom->loadXML($string);
$xpath = new DomXPath($dom);
/*DOMNodeList*/
$queryNode = $xpath->query("subteams"); //length 0, count 0
//$queryNode = $xpath->query("root"); //length 0, count 0
//$queryNode = $xpath->query("teams"); //length 1, count 1
echo "length " . $queryNode->length . "<br>";
echo "count " . $queryNode->count() . "<br>";
var_dump( $queryNode); // only for teams node - object(DOMNodeList)#4 (1) { ["length"]=> int(1) }
Спасибо
В ваших выражениях XPath отсутствуют разделители пути.
Например, если вы хотите все subteams
в любом месте документа используйте
$queryNode = $xpath->query("//subteams");
Вы также можете использовать
$queryNode = $xpath->query("/root/team/subteams");
или же
$queryNode = $xpath->query("team/subteams");
"team"
работает, потому что контекстом ваших запросов по умолчанию является элемент документа, т.е. <root>
,
Других решений пока нет …