XML - 使用php从属性中获取元素子值

时间:2010-11-17 12:04:44

标签: php xml dom

我正在使用php来解析我的xml文件,我想要做的就是从属性中获取元素子值:

  <question number="1">
    <type>Main</type>
  </question>

  <question number="2">
    <type>Secondary</type>
  </question>

伪代码(不起作用):

$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
}

}

1 个答案:

答案 0 :(得分:4)

使用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节点,因此{{ 1}}而不是item(1),因为后者是item(0)节点