編集:私はそれを理解しました、これの下半分に向かって見てください
質問をする前に、私は TBXML と RapidXML の使用に成功したことを述べておきます。具体的には、Rapid はこのまったく同じドキュメントを正常に解析しました。XML の読み取りと値の割り当てに精通しています。
とはいえ、TinyXML と Cocos は android にコンパイルされるため、良い組み合わせのようです。ノードを1回下に移動し、値を出力して、自分がどこにいるのかを確認できます...問題は次のとおりです。
node = node->nextSibling();
常に false を返します。私はこれを行うことができることを学びました:
node->Parent()->NextSibling(); これにより、代わりに次の兄弟が得られます。しかし、ここに問題があります:
ParentNode->FirstChild() は、そのツリーの最初の要素を返します。しかし、ParentNode->NextSibling() を呼び出すと、何らかの理由で兄弟へのポインターが返されますが、ツリーの 1 レベル上にあることを除きます。
これは、ループを半悪夢にするでしょう。
私はhttp://grinninglizard.com/tinyxml2docs/classtinyxml2_1_1_x_m_l_node.htmlを精査して、ノードまたは要素スタイル (例: NextSiblingElement() ) の使用の違いを見つけていますが、せいぜい 1 回のループで失敗するか、単にクラッシュ。
このパーサーは他のパーサーのように機能しないか、規約が間違っています。どこにいるのかを確認するためにどこにでも 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 の質問です。
編集:まだ答えられませんが、わかりました:
の愛のために...私は何か間違ったことをしているといいのですが、あなたがこれをしているなら、このパターンに注意してください.
注: ノードはルートを指します。
基本的に、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();