我正在使用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
}
}
答案 0 :(得分:4)
$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)
节点