2012-05-28 5 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++의 버전에 따라 다르지만, /message/field과 같은 간단한 XPath 표현식을 실행할 수 있어야합니다.

또 다른 옵션은 DOM API를 유지하면서 field 요소를 찾고 DOMNode에서 사용할 수있는 getChildNodes()을 사용하여 자식 노드를 반복하는 것입니다.

마지막으로, XPath 아이디어가 마음에 들었지만 Xerces C++ 버전이 아닌 경우 "comfort zone"에서 벗어나 Xalan C++ 또는 libxml2을 살펴보십시오. 둘 다 전체 XPath 1.0을 지원해야합니다.

관련 문제