我有这个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);
答案 0 :(得分:0)
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支持。