所以我有以下XML文件,我只对<respcondition>
元素感兴趣,其中只有<or>
元素,而不是<and>
元素。
我在PHP中尝试了以下声明:
<!-- language: lang-php -->
foreach ($item->resprocessing->children() as $child) {
if ((string) $child->getName() == 'respcondition') {
if ((string) $child->respcondition->children()->getName() == 'conditionvar') {
if ((string) $child->respcondition->conditionvar->children()->getName() == 'or') {
$responseID = $child->respcondition->conditionvar->or->varequal->attributes()->respident;
//some code
}
}
}
}
}
但我只是进入第一个IF,所以我发现children()
不包含该元素的整个XML。我可以使用一些替代品吗?
<!-- language: lang-xml -->
<resprocessing>
<outcomes>
<decvar varname="SCORE" vartype="Decimal" defaultval="0" minvalue="0.0" maxvalue="1.0" cutvalue="1.0"/>
</outcomes>
<respcondition continue="Yes" title="Mastery">
<conditionvar>
<or>
<varequal respident="1000006631" case="Yes"><![CDATA[Mars]]></varequal>
</or>
</conditionvar>
<setvar varname="SCORE" action="Add">1.0</setvar>
</respcondition>
<respcondition continue="Yes" title="Mastery">
<conditionvar>
<or>
<varequal respident="1000006678" case="Yes"><![CDATA[Jupiter]]></varequal>
</or>
</conditionvar>
<setvar varname="SCORE" action="Add">1.0</setvar>
</respcondition>
<respcondition title="Mastery" continue="Yes">
<conditionvar>
<and>
<or>
<varequal respident="1000006421" case="Yes"><![CDATA[planets]]></varequal>
</or>
<or>
<varequal respident="1000006468" case="Yes"><![CDATA[sun]]></varequal>
</or>
<or>
<varequal respident="1000006558" case="Yes"><![CDATA[Mercury]]></varequal>
</or>
</and>
</conditionvar>
<displayfeedback feedbacktype="Response" linkrefid="Mastery"/>
</respcondition>
</resprocessing>
亲切的问候
答案 0 :(得分:0)
您可以使用SimpleXml::xpath
直接获取这些节点:
/resprocessing/respcondition[descendant::or and not(descendant::and)]
另请查看此XPath tutorial。
答案 1 :(得分:0)
看一下通过xpath提取它;
以下内容将返回所有respcondition节点,其中包含一个conditionvar节点,其中只包含“或”子节点。在你的xml示例中,这不会返回任何内容,我相信你的目标是。
$xmlDoc->xpath('/resprocessing/respcondition[conditionvar/or]');
或者,如果您想提取respcondition节点,但现在想到“和”子节点,请使用;
$xmlDoc->xpath('/resprocessing/respcondition[conditionvar/and/or]');
xpath是一种简单而强大的导航和提取xml文档的方法,如果可能,请使用它。