dongnai5905 2010-11-17 04:04
浏览 94
已采纳

XML - 使用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
}

}
  • 写回答

1条回答 默认 最新

  • dongzi1209 2010-11-17 04:17
    关注

    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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
编辑
预览

报告相同问题?

手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部