2015-09-17 5 views
1

Это вопрос довольно простой для людей, которые использовали TinyXML. Я пытаюсь использовать TinyXML для анализа XML-документа и выделения некоторых значений. Я понял, как добавить в библиотеку вчера, и я успешно загрузил документ (эй, это начало).с использованием синтаксического анализа XML-элементов TinyXML

Я читал руководство, и я не могу понять, как вытащить отдельные атрибуты. После Googling, я не нашел пример моего конкретного примера, поэтому, возможно, кто-то, кто использовал TinyXML, может помочь. Ниже представлен фрагмент XML, и я начал его анализировать.

XML:

<?xml version='1.0' encoding='UTF-8'?> 
<hnisi> 
<head><version>1.0</version></head> 
<body> 
    <params> 
     <param key="FHZ" val="1" /> 
     <param key="MSG" val="login failed" /> 
     <param key="SESSIONID" val="HISID6B5FD5E290884C77A2BA827AA2B1E53D" /> 
    </params> 
    </body> 
</hnisi> 

код загрузки/синтаксический анализ:

TiXmlDocument doc; 
    const char *filedate=response.return_->c_str(); 
    doc.Parse(filedata, 0, TIXML_ENCODING_UTF8); 

    TiXmlElement *pRoot, *pParm, *pProcess, *pApp, *pLineFormat; 
     pRoot = XMLdoc.FirstChildElement("hnisi"); 
     if (pRoot) 
     { 
      pParm= pRoot->FirstChildElement("params"); 
      while(pParm) 
      { 
      // I don't know here,how do I read the attribute of value of FHZ,MSG and SESSIONID? 


      } 
     } 

ответ

1

Вы пропустили, чтобы получить <body> элемент, который является дочерним <hnisi>, а затем вы хотите иметь <param> элементы, которые являются детьми <params> в вашем xml. Чтобы получить атрибуты, просто используйте функцию AttributeTiXmlElement.

TiXmlDocument doc("yourfile.xml"); 
if(doc.LoadFile()) 
{ 
    TiXmlElement *pRoot, *pBody, *pParms, *pProcess, *pApp, *pLineFormat, *pParm; 
    pRoot = doc.FirstChildElement("hnisi"); 
    if (pRoot) 
    { 
     pBody= pRoot->FirstChildElement("body"); //body should be read 
     if (pBody) { 
      pParms= pBody->FirstChildElement("params"); //now params 
      if(pParms) 
      { 
       pParm=pParms->FirstChildElement("param"); 
       while (pParm) { 
        // now loop al param elements and get their attributes 
        std::cout <<"key="<<pParm->Attribute("key")<<std::endl; 
        std::cout <<"val="<<pParm->Attribute("val")<<std::endl; 

        //next sibling 
        pParm=pParm->NextSiblingElement("param"); 
       } 
      } 
     } 
    } 
} 
+0

спасибо, у меня есть проблема, –

Смежные вопросы