Только одно имя узла, но несколько значений для nodeValue- DOMXPATH - PullRequest
0 голосов
/ 02 мая 2018

Почему nodename печатает "root", но nodeValue возвращает несколько значений и все значения в дочерних узлах.

Запустив этот код, эхо вернет

"Имя родительского узла является корневым. Его значение - Текстовое значение 11111. Пустое текстовое значение 2222 пробел текстовое значение 3333 "

Второй эхо вернет это

"Дочерний узел - это spaceIts, значение - это пробел, текстовое значение 3333"

<?php

$xmldoc=
    '<?xml version="1.0" ?><root>

<text>Text value 11111</text>
<none/>
<empty>Empty text value 2222</empty>
<space>space text value 3333 </space>
</root>';

$domdoc = new DoMDocument();
$domdoc->loadXML($xmldoc);

$xpath = new DOMXPath($domdoc);

$rootNodeListParent = $xpath->query("//root");
$rootNodeParent = $rootNodeListParent[0];
echo "The Name of the parent node is " . $rootNodeParent->nodeName. " Its value is " . $rootNodeParent->nodeValue . "<br>";

$queryNodeList = $xpath->query("//space");
$nodeSpace = $queryNodeList[0];
 echo "The child node is " . $nodeSpace->nodeName. "Its value is " . $nodeSpace->nodeValue; //spacevalue ssddd
}

1 Ответ

0 голосов
/ 02 мая 2018

"nodeValue возвращает несколько значений и все значения в дочерних узлах"

Потому что это то, что вы просили с . $rootNodeParent->nodeValue . там.

Строковое значение корневого узла является объединением строковые значения всех потомков текстового узла корневого узла в заказ документов.

"Для каждого типа узла есть способ определения строкового значения для узла этого типа. Для некоторых типов узлов строковое значение часть узла; для других типов узлов строковое значение вычисляется из строкового значения узлов-потомков. "

Ссылка https://www.w3.org/TR/1999/REC-xpath-19991116/#data-model

...