开发者

XML - Getting the element child value from the attribute using php

开发者 https://www.devze.com 2023-01-25 06:57 出处:网络
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:

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

精彩评论

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