2

次の構造のかなり複雑な XML ファイルを解析しています。

<ルート> 
...
...
<アイテム>
<サブアイテム id="1"/>
<テキスト> テキスト
1
</テキスト>
</アイテム>
<アイテム>
<サブアイテム id="2"/>
<テキスト> テキスト
2
< /テキスト>
</アイテム>
...
<アイテム>
...
</アイテム>
...
</ルート>

かなり大雑把ですが、私のドリフトを理解していただければ幸いです。私は主に「アイテム」ノードに興味があります。そこで、次のコードを書きました (Qt のオンライン マニュアルから直接):

QXmlQuery query;
query.setQuery("//item/");

QXmlResultItems result;
query.evaluateTo(&result);

QXmlItem item(result.next());
while (!item.isNull()) 
{
  if (item.isNode())
  {
      // WHAT DO I DO NOW?
  }
  item = result.next();
}

QXmlItem は、リテラル値 (文字列など) またはノード (item.isNode() が行っていること) の 2 つの概念を表しているように見えます。残念ながら、QXmlItem を再度クエリ可能なものに変換する方法がわかりません。特に上記の例から、「id」属性とテキスト要素を取得したいと思います。XQuery アプローチを使用してこれを行うことはできますか?

何かアドバイス?

ありがとう!

4

2 に答える 2

4

QXmlItem を使用して、クエリのフォーカスを変更できます。例えば:

QXmlItem item(result.next());
while (!item.isNull()) 
{
  if (item.isNode())
  {
    query.setFocus(item);
    query.setQuery("./text/string()");
    QString text;
    query.evaluateTo(&text);
  }
  item = result.next();
}

<text>の値を取得します<item>

于 2011-04-05T10:44:32.123 に答える
2

QXmlQueryはQtのドキュメントの1つの厄介な部分ですが、実際に必要なアイテムを返すようにクエリを書くと思います(これは教育を受けていない推測です)

query.setQuery("//item/subitem | //item/text");

W3Schools には、役立つXPath に関するチュートリアルがあります。

于 2010-03-13T04:38:00.050 に答える