2009-04-25 12 views
7

मैं TinyXml आउटपुट से तत्वों के समूह को पार्स करना चाहता हूं। अनिवार्य रूप से, मुझे बंदरगाह के किसी पोर्ट पोर्ट तत्व "portid" विशेषता को चुनने की आवश्यकता है "open" (पोर्ट 23 के लिए नीचे दिखाया गया है) की स्थिति है।विशिष्ट तत्व के लिए पार्स करने के लिए TinyXml का उपयोग कैसे करें

ऐसा करने का सबसे अच्छा तरीका क्या है? यहाँ (सरलीकृत) TinyXml से उत्पादन के लिए सूची है:

<?xml version="1.0" ?> 
<nmaprun> 
    <host> 
     <ports> 
      <port protocol="tcp" portid="22"> 
       <state state="filtered"/> 
      </port> 
      <port protocol="tcp" portid="23"> 
       <state state="open "/> 
      </port> 
      <port protocol="tcp" portid="24"> 
       <state state="filtered" /> 
      </port> 
      <port protocol="tcp" portid="25"> 
       <state state="filtered" /> 
      </port> 
      <port protocol="tcp" portid="80"> 
       <state state="filtered" /> 
      </port> 
     </ports> 
    </host> 
</nmaprun> 

उत्तर

10

यह मोटे तौर पर यह करना होगा:

TiXmlHandle docHandle(&doc); 

    TiXmlElement* child = docHandle.FirstChild("nmaprun").FirstChild("host").FirstChild("ports").FirstChild("port").ToElement(); 

    int port; 
    string state; 
    for(child; child; child=child->NextSiblingElement()) 
    { 

     port = atoi(child->Attribute("portid")); 

     TiXmlElement* state_el = child->FirstChild()->ToElement(); 

     state = state_el->Attribute("state"); 

     if ("filtered" == state) 
      cout << "port: " << port << " is filtered! " << endl; 
     else 
      cout << "port: " << port << " is unfiltered! " << endl; 
    } 
4

आपका सबसे अच्छा शर्त TinyXML के अलावा TinyXPath पुस्तकालय का प्रयोग है।

यह सही XPath क्वेरी के लिए अपना सर्वश्रेष्ठ अनुमान है:

/nmaprun/host/ports/port[state/@state="open"][1]/@portid

आप इसे एक online tester साथ देख सकते हैं।

संबंधित मुद्दे

 संबंधित मुद्दे