2012-05-28 16 views
0

我有,我想提取我的消息的孩子這個XML文件中的字段如何僅使用getElementByTagName獲取子節點列表?

<message name="IOI" > 
<field number="23" name="IOIID" type="STRING" required="Y" /> 
<field number="28" name="IOITransType" type="CHAR" required="Y" > 
    <value enum="C" description="CANCEL" /> 
    <value enum="N" description="NEW" /> 
    <value enum="R" description="REPLACE" /> 
</field> 
<field number="26" name="IOIRefID" type="STRING" required="N" /> 
<component name="SecAltIDGrp" required="N" > 
    <field number="454" name="NoSecurityAltID" type="NUMINGROUP" required="N" > 
     <field number="455" name="SecurityAltID" type="STRING" required="N" /> 
     <field number="456" name="SecurityAltIDSource" type="STRING" required="N" /> 
     </field>  
</component> 

所以我用的getElementsByTagName(),但它給了我所有的孩子與自己的孩子,所以我怎麼可能只得到我的消息字段沒有我的字段的字段?

DOMNodeList* fieldsNodeList = MessageElement->getElementsByTagName(xmlStrVar); 

回答

0

Xerces C++提供了partial XPath implementation。這裏是一個SO question with more details about it。據說,根據您使用的Xerces C++版本,您應該可以運行簡單的XPath表達式,如/message/field

另一種選擇是繼續使用DOM API,並使用上的getChildNodes()迭代子節點,查找field元素。

最後但並非最不重要的,如果你喜歡XPath的想法,但你的Xerces C++版本不合格,考慮走出你的「舒適區」,看看Xalan C++libxml2。兩者都應該有完整的XPath 1.0支持。

相關問題