如何使用getElementsByTagName只获取子节点列表?

时间:2012-05-28 17:28:16

标签: c++ xml dom xml-parsing xerces

我有这个XML文件,我想从中提取我的消息子字段

<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);

1 个答案:

答案 0 :(得分:0)

Xerces C ++提供partial XPath implementation。这是一个SO question with more details about it。话虽如此,根据您使用的Xerces C ++的版本,您应该能够运行简单的XPath表达式,如/message/field

另一个选择是继续使用DOM API,并使用DOMNodegetChildNodes()查找field个元素来迭代子节点。

最后但并非最不重要的是,如果您喜欢XPath的想法,但您的Xerces C ++版本不符合它,请考虑退出“舒适区”并查看Xalan C++libxml2。两者都应该有完整的XPath 1.0支持。