c++ - 使用 TinyXML 解析 XML 元素

标签 c++ xml-parsing tinyxml

对于使用过 TinyXML 的人来说,这应该是一个非常简单的问题。我正在尝试使用 TinyXML 来解析 XML 文档并提取一些值。我昨天弄清楚了如何添加到库中,并且已经成功加载了文档(嘿,这是一个开始)。

我一直在阅读手册,但我不太清楚如何提取各个属性。谷歌搜索后,我还没有找到我的具体示例的示例,所以也许使用过 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?


           }
       }

最佳答案

您错过了 <body>元素,它是 <hnisi> 的子元素,然后您想要 <param> <params> 的子元素在你的xml中。要获取属性,只需使用 Attribute TiXmlElement的功能.

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");
                }
            }
        }
    }
}

关于c++ - 使用 TinyXML 解析 XML 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32633503/

相关文章:

c++ - 我们应该删除一个不是 new/malloc 的指针吗?

xml - 使用Powershell修改通过子属性迭代的XML父属性

c++ - TinyXml如何序列化

c++ - mainwindow.o和***.o文件中的QT重复符号

c++ - tinyxml2 相当于 TiXmlNode 枚举?

c# - 将 C++ map 数据传递给 C#

c++ - 多组对象

c++ - 使用表达式参数专门化模板

ios - 在 Swift 中解析 XML 属性

java - 使用继承和 Java 接口(interface)使用为 Java 创建 XML 模式