我想用TinyXML解析xml文件中的一些数据。

这是我的text.xml文件内容:

<?xml version="1.0" encoding="iso-8859-1"?>
<toto>
  <tutu>
    <tata>
      <user name="toto" pass="13" indice="1"/>
      <user name="tata" pass="142" indice="2"/>
      <user name="titi" pass="azerty" indice="1"/>
    </tata>
  </tutu>
</toto>

我想访问第一个元素“用户”。执行此操作的方法如下:
TiXmlDocument   doc("test.xml");

    if (doc.LoadFile())
    {
        TiXmlNode *elem = doc.FirstChildElement()->FirstChildElement()->FirstChildElement()->FirstChildElement();
std::cout << elem->Value() << std::endl;
}

在输出中:用户。

但是代码很丑陋,不是通用的。我尝试使用下面的代码模拟与上面的代码相同的行为,但是它不起作用并且发生了错误。
TiXmlElement *getElementByName(TiXmlDocument &doc, std::string const &elemt_value)
{
    TiXmlElement *elem = doc.FirstChildElement(); //Tree root

    while (elem)
    {
        if (!std::string(elem->Value()).compare(elemt_value))
            return (elem);
        elem = elem->NextSiblingElement();
    }
    return (NULL);
}

也许我错过了可以执行此工作的库中的特殊功能(getElementByName函数)。我只想获得一个指向该元素的指针,该元素的值就是我要寻找的元素。有人可以帮助我吗?在此先感谢您的帮助。

最佳答案

试试这个

TiXmlElement * getElementByName(TiXmlDocument & doc, std::string const & elemt_value) {

   TiXmlElement * elem = doc.RootElement(); //Tree root
   while (elem) {
      if (!std::string(elem - > Value()).compare(elemt_value)) return (elem);
      /*elem = elem->NextSiblingElement();*/
      if (elem - > FirstChildElement()) {
         elem = elem - > FirstChildElement();
      } else if (elem - > NextSiblingElement()) {
         elem = elem - > NextSiblingElement();
      } else {
         while (!elem - > Parent() - > NextSiblingElement()) {
            if (elem - > Parent() - > ToElement() == doc.RootElement()) {
               return NULL;
            }
            elem = elem - > Parent() - > NextSiblingElement();
         }
      }
   }
   return (NULL);
}

关于c++ - 使用TinyXML查找XML文档中的特定节点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11921463/

10-10 20:04