【发布时间】:2019-06-24 20:40:22
【问题描述】:
我想读取一个 xml 文件,其中找到了几个测试,但我总是得到第一个并且它没有退出循环。 如果我一次迭代做得很好,但是当我做气泡时,我就无法进行下一个测试。
如果我使用 // pBodys = pRoot-> NextSiblingElement ("Test"); 我错过了第 2 次迭代中的错误, (https://i.gyazo.com/9a108bf422299b66abfe91127668a63c.png) 如果我不使用它,它会一直处于无限循环中
(https://i.gyazo.com/133be25514a8a000fce87e2fc7cc52ad.png)
我无法继续前进。 对不起谷歌翻译。 问候
int main()
{
XMLDocument doc;
doc.LoadFile("example.xml");
XMLElement *pRoot, *pBodys, *pParms, *pParms2, *pProcess, *pApp, *pLineFormat, *pParm, *pParm2, *count;
pRoot = doc.FirstChildElement("Tests");
if (pRoot)
{
count = pRoot->FirstChildElement("count");
std::cout << "cont=" << count->Attribute("cont") << std::endl;
pBodys = pRoot->FirstChildElement("Test");
//for (int i = 0; i < (int)count->Attribute("cont"); i++) {
std::cout << "id=" << pBodys->Attribute("id") << std::endl;
if (pBodys) {
pParms = pBodys->FirstChildElement("Inputs");
if (pParms)
{
pParm = pParms->FirstChildElement("Input");
while (pParm) {
std::cout << "port=" << pParm->Attribute("port") << " ";
std::cout << "value=" << pParm->Attribute("value") << std::endl;
pParm = pParm->NextSiblingElement("Input");
}
}
pParms2 = pBodys->FirstChildElement("Outputs");
if (pParms2)
{
pParm2 = pParms2->FirstChildElement("Output");
while (pParm2) {
std::cout << "port=" << pParm2->Attribute("port") << " ";
std::cout << "value=" << pParm2->Attribute("value") << std::endl;
pParm2 = pParm2->NextSiblingElement("Output");
}
}
}
//pBodys = pRoot->NextSiblingElement("Test");
//}
}
return 0;
}
DOC example.xml
<Tests>
<count cont="2"></count>
<Test id="test0">
<Inputs>
<Input port="A" value="1" />
<Input port="B" value="4.56" />
<Input port="C" value="7" />
</Inputs>
<Outputs>
<Output port="D" value="10" />
</Outputs>
</Test>
<Test id="test1">
<Inputs>
<Input port="K" value="3" />
<Input port="L" value="9.56" />
</Inputs>
<Outputs>
<Output port="P" value="6" />
</Outputs>
</Test>
</Tests>
【问题讨论】:
-
您应该使用 TiXmlAttribute::QueryIntValue(),如 TinyXML example中所示
标签: c++ xml parsing using tinyxml