Использование DOMXPath::evaluate
$xp = new DOMXPath($xmlDoc);
echo $xp->evaluate('string(/questions/question[@number=1]/type)'); // Main
Обратите внимание, что у вас должен быть корневой узел, поэтому в приведенном выше примере предполагается, что существует элемент <questions>
. Как правило, более эффективно использовать прямой путь к элементам, но вы также можете запросить любой <question>
в любом месте документа с помощью //question[…
.
Если вы хотите сделать это без XPath, вы можете сделать
foreach ($xmlDoc->getElementsByTagName('question') as $question) {
if($question->getAttribute('number') === '1') {
echo $question->getElementsByTagName('type')->item(0)->nodeValue;
// or
echo $question->childNodes->item(1)->nodeValue;
}
}
Обратите внимание, что при использовании childNodes
и без установки DOMDocument::preserveWhiteSpace
на FALSE
любые разрывы строк, табуляции и другие пробелы будут анализироваться как DOMText
узлов, следовательно, item(1)
, а не item(0)
, поскольку последний является DOMText
узлом