XML - Getting the element child value from the attribute using php
I'm using php to parse my xml file, all I want to be able to do is to get the element child value from the attribute:
<question number="1">
<type>Main</type>
</question>
<question number="2">
<type>Secondary</type>
</question>
Pseudo Code (doesn't work):
$xmlDoc = new DOMDocument();
$xmlDoc->load('questions.xml');
$searchNode = $xmlDoc->开发者_运维百科getElementsByAttribute("number");
foreach( $searchNode as $searchNode ) {
if ($searchnode == "1"){
$xmlType = $searchNode->getElementsByTagName( "Type" );
$valueType = $xmlType->item(0)->nodeValue;
echo $valueType;
}else{
//Do nothing
}
}
Use DOMXPath::evaluate
$xp = new DOMXPath($xmlDoc);
echo $xp->evaluate('string(/questions/question[@number=1]/type)'); // Main
Note that you have to have a root node, so the above assumes there is a <questions>
element. It is generally more efficient to use a direct path to the elements, but you can also query any <question>
anywhere in the document with //question[…
instead.
If you want to do that without XPath, you can do
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;
}
}
Note that when using childNodes
and not setting DOMDocument::preserveWhiteSpace
to FALSE
, any line breaks, tab stops and other whitespace will be parsed as DOMText
Nodes, hence item(1)
and not item(0)
because the latter is a DOMText
node
精彩评论