【发布时间】:2012-05-06 12:10:51
【问题描述】:
编辑:我想通了,看看下半部分
在我提出问题之前,我先声明我已经成功使用了 TBXML 和 RapidXML。具体来说,Rapid 已经成功地解析了这个相同的文档。我熟悉 XML 读取和赋值。
也就是说,TinyXML 和 Cocos 似乎是一个很好的组合,因为它可以编译为 android。我可以去节点一次,打印出值,看看我在哪里......问题是这样的:
node = node->nextSibling();
总是返回 false。我知道我可以这样做:
node->Parent()->NextSibling();这将给我下一个兄弟姐妹。但这里有一个问题:
ParentNode->FirstChild() 将返回该树的第一个元素。但是如果我调用 ParentNode->NextSibling(),由于某种原因,它会返回一个指向兄弟节点的指针,除非它现在在树上更高一级。
这将使循环成为一场噩梦。
我正在搜索http://grinninglizard.com/tinyxml2docs/classtinyxml2_1_1_x_m_l_node.html 以查找使用节点或元素样式(例如: NextSiblingElement() )之间的差异,但充其量,我会遇到一个失败的循环,或者只是崩溃。
这个解析器不像其他解析器那样工作,或者我的约定有误。我到处都放置了 cout 以查看我在哪里,并且最初的运行似乎很好。具体来说 NextSibling 会导致问题,我想我只是不知道他们“打算”使用的树结构。
这是我现在的嵌套循环:
for( node = node->FirstChild(); node; node = node->NextSibling() ) {
cout << endl << node->Parent()->Value();
for( tempElement = node->FirstChildElement(); tempNode; tempElement = tempElement->NextSibling() ) {
//assign inner values
}
//take the inner values and assign them to an object
}
所以,虽然我的代码符合遍历兄弟元素的所有建议,但它失败了。我可以从使用过它的人那里获得一些帮助,因为我在 30 分钟内使用其他系统所做的事情需要花费数小时。
另外,我相信一旦理解了“他们的方式”,它就会更有意义,但我在互联网上找不到一个可行的例子。很多人建议我的示例代码(不工作)。
在大多数情况下,TinyXML 确实会找到节点和值,如果你记得要获取类型,你必须使用 node->Parent()->Value(),然后知道你在树中的位置并不会似乎不太难。
只是为了好玩,这是负载,它正在工作:
if (doc.LoadFile(xmlFilePath.c_str()) == XML_SUCCESS)
{
XMLNode *node = doc.RootElement();
node = node->FirstChild(); //root
//....
感谢您的帮助!将不胜感激,也许是唯一一个 TinyXML2 问题,对未来的提问者有一个有效的答案,至少目前是这样。
编辑:我还不能回答,但我想通了:
为了……我希望我做错了什么,如果你这样做,请注意这个模式,它有效(TinyXML2 可能相同,我猜,只需将 TiXmlNode 替换为 XMLNode ):
注意:节点指的是根。
基本上,将 NextSibling 视为父级上的一个函数,它在其中布置“谁是下一个”。
感谢您迄今为止的访问。这至少遍历了 6 个项目(外部项目,耶!),然后我确定我现在遇到的错误是我自己的。
如果其他人需要动态遍历树,这应该会有所帮助。
TiXmlNode * subNode = node->FirstChild();
for(subNode = node ; subNode; subNode = subNode->Parent()->NextSibling())
{
subNode = subNode->FirstChild();
cout << endl << "Parent " << subNode->Parent()->Value() << endl;
for( tempNode = subNode; tempNode; tempNode = tempNode->Parent()->NextSibling() )
{
tempNode = tempNode->FirstChild();
【问题讨论】:
-
我刚刚意识到,这段代码有我的元素采样...用 tempNode 替换 tempElement,你会很清楚我在大多数尝试中都在做什么
-
更新:我只是将其更改为与 TiXMLDocument (TinyXML v1) 一起使用......同样的问题。
-
您能否将您的解决方案移至一个答案,以便我们将其从未回答列表中删除?谢谢!
-
啊,我对元方面还不太熟悉,抱歉。现在会做。 (24小时的限制让我如果我解决得太快就继续前进,然后我就忘记了)。谢谢
标签: android iphone xml parsing tinyxml