Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android TinyXML2解析非常糟糕_Android_Iphone_Xml_Parsing_Tinyxml - Fatal编程技术网

Android TinyXML2解析非常糟糕

Android TinyXML2解析非常糟糕,android,iphone,xml,parsing,tinyxml,Android,Iphone,Xml,Parsing,Tinyxml,编辑:我想出来了,看看这个的下半部分 在我提问之前,我将说明我已经成功地使用了TBXML和RapidXML。特别是Rapid已经成功解析了这同一个文档。我熟悉XML读取和赋值 也就是说,TinyXML和Cocos似乎是一个很好的组合,因为它可以编译到android上。我可以下一次节点,打印出值,看看我在哪里。。。问题是: node=node->nextSibling() 总是返回false。我知道我可以做到这一点: node->Parent()->NextSibling();这会给我下一个兄弟姐

编辑:我想出来了,看看这个的下半部分

在我提问之前,我将说明我已经成功地使用了TBXML和RapidXML。特别是Rapid已经成功解析了这同一个文档。我熟悉XML读取和赋值

也就是说,TinyXML和Cocos似乎是一个很好的组合,因为它可以编译到android上。我可以下一次节点,打印出值,看看我在哪里。。。问题是:

node=node->nextSibling()

总是返回false。我知道我可以做到这一点:

node->Parent()->NextSibling();这会给我下一个兄弟姐妹。但这里有一个问题:

ParentNode->FirstChild()将返回该树的第一个元素。但是如果我调用ParentNode->NextSibling(),出于某种原因,它会返回一个指向同级的指针,但现在它在树上的级别更高了

这将使循环成为一场半噩梦

我正在搜寻使用节点或元素样式(例如:NextSiblingElement())之间的差异,但充其量,我只能通过一次失败或只是一次崩溃来完成一次循环

这个解析器不像其他解析器那样工作,或者我的约定有误。我把cout's放在了各处,看看我在哪里,最初的跑步看起来不错。特别是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
            }
谢谢你的帮助!非常感谢,这也许是唯一一个为未来提问者提供有效答案的TinyXML2问题,至少在这个时候


编辑:我还不能回答,但我想:

为了爱。。。我希望我做错了什么,如果您正在这样做,请注意这个模式,它是有效的(我猜TinyXML2可能也是如此,只是用XMLNode替换TiXmlNode):

注意:节点是指根

本质上,将NextSibling视为父级上的一个函数,它在父级上列出“下一个是谁”

谢谢你到目前为止的访问。这至少会遍历6个项目(外部的,耶!),然后我确定我现在遇到的bug是我自己的

如果其他人需要动态遍历树,这应该会对他们有所帮助

       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();
TiXmlNode*subNode=node->FirstChild();
对于(subNode=node;subNode;subNode=subNode->Parent()->NextSibling())
{
subNode=subNode->FirstChild();
cout NextSibling())
{
tempNode=tempNode->FirstChild();
关键是这一行: 本质上,将NextSibling视为父级上的一个函数,它在父级上列出“下一个是谁”

虽然我以前使用的每个XML解析器都表示“当前节点的同级”,但TinyXML表示“子节点的同级”

一旦我习惯了它,它看起来是完全自然的,但它仍然让我陷入一个崩溃的循环

示例代码在文章的下半部分。这个答案的存在在这篇文章的评论中得到了解释


再见

我刚刚意识到,这段代码有我的元素采样…用tempNode替换tempElement,你会对我在triesUpdate的大部分时间里所做的事情有一个很好的了解:我刚刚将其更改为使用TiXMLDocument(TinyXML v1)…还有同样的问题。你能将你的解决方案向下移动到一个答案,这样我们就可以从未回答的列表中删除这个问题吗?谢谢!啊,我还不太熟悉元方面,抱歉。现在就可以。(24小时的限制使我只能继续,如果我解决得太快,那么我就忘了)。谢谢
       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();