0

我有这个 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);
4

1 回答 1

0

Xerces C++ 提供部分 XPath 实现。这是一个关于它的更多细节的问题。话虽如此,根据您使用的 Xerces C++ 版本,您应该能够运行简单的 XPath 表达式,例如/message/field.

另一种选择是继续使用 DOM API,只使用getChildNodes()可用于DOMNode查找field元素的子节点进行迭代。

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

于 2012-05-29T02:47:39.027 回答