开发者

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

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜