【问题标题】:how to get only the children nodelist using getElementByTagName?如何使用 getElementsByTagName 仅获取子节点列表?
【发布时间】:2012-06-03 01:00:17
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

    另一种选择是继续使用 DOM API,只需使用 DOMNode 上的 getChildNodes() 遍历子节点,寻找 field 元素。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-14
      • 2012-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多