2012-03-20 18 views
2

私は<respcondition>要素にのみ興味があり、<and>要素には<or>要素しか含まれていない次のXMLファイルを持っています。Foreach children()SimpleXMLは完全な構造体を与えません

私は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> 

種類は、あなたが直接それらのノードを取得するためにSimpleXml::xpathを使用することができます

答えて

0

xpathで抽出してみましょう。

以下は、条件分岐ノードを持つすべてのrespconditionノードを返します。「または」子ノードのみが含まれています。あなたのXMLの例では、これは何も返されません、私はあなたが目指していると信じています。

$xmlDoc->xpath('/resprocessing/respcondition[conditionvar/or]'); 

それとも、あなたはrespconditionノードを抽出したいが、今心の中で「と」子ノードをむき出し、使用している場合。

$xmlDoc->xpath('/resprocessing/respcondition[conditionvar/and/or]'); 

XPathが可能であればそれを使用し、XML文書をナビゲートし、抽出する簡単かつ強力な方法です。

0

について:

/resprocessing/respcondition[descendant::or and not(descendant::and)] 

はまた、このXPath tutorialを見ています。

関連する問題