我想用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/