6

次の構造のXMLファイルを解析しようとしています。

<I>
  <C c="test1">
     <H><Pd pd="123"/>
        <f p="789" r="456"/>
     </H>
     <M m="test2">
       <H><Pd pd="3456"/><R r="678"/>
       </H>
     </M>
  </C>
  <T t="0">
     <T2>123</T2>
     <T3>2345</T3>
  </T>
  <T t="1">
     <T1>23456</T1>
     <T2>23</T2>
     <T3>123</T3>
     <T4>456</T4>
  </T>
</I>

0と1などの番号のリストと「23」などの検索パターンがあります。次に、子ノードの1つ(T1 、T2、T3)には検索パターンが含まれます。

誰かが私がこの問題を始めるのを手伝ってくれる?Qt関数を使いたいのですが、どうやって始めたらいいのかわかりません。

私はすべてのヒントに満足しています!

4

3 に答える 3

6

テストされていませんが、これは私がすでにQtを使用して非常に単純なXMLファイルをスキャンする方法です。多分これはあなたにそれをここで使う方法のヒントを与えることができます:

QDomElement docElem;
QDomDocument xmldoc;

xmldoc.setContent(YOUR_XML_DATA);
docElem=xmldoc.documentElement();

if (docElem.nodeName().compare("T")==0)
{
    QDomNode node=docElem.firstChild();
    while (!node.isNull())
    {
        quint32 number = node.toElement().attribute("t").toUInt(); //or whatever you want to find here..
        //do something
        node = node.nextSibling();
    }
}
于 2012-10-16T12:15:30.580 に答える
2

XMLの場合は、QDomとQSaxの機能がしばらくの間アクティブに維持されていないという理由だけで、QtCoreモジュールのQXmlStreamReaderとQXmlStreamWriterを使用することが提案されました。

http://doc.qt.digia.com/4.7/qxmlstreamreader.html

http://doc.qt.digia.com/4.7/qxmlstreamwriter.html

サンプルコードをqtdocsからここにコピーして貼り付けません。あなたがそれらをよく理解できることを願っています。また、qt4.xのexamples/xmlディレクトリを確認することもできます。

于 2012-10-16T15:38:00.287 に答える
1

QXmlQueryを使用できます。XQueryのように機能します(構文は同じだと思います)。また、XQueryの柔軟性を最大限に活用して、xmlファイルを解析できます。次のようなコードから始めることができます。

QByteArray myDocument;
QBuffer buffer(&myDocument); // This is a QIODevice.
buffer.open(QIODevice::ReadOnly);
QXmlQuery query;
query.bindVariable("myDocument", &buffer);
query.setQuery("doc($myDocument)");

setQueryメソッドを使用すると、検索パターンを定義できます。XQueryの場合と同様に、要素ID、属性などに基づくことができます。これはQXmlQueryドキュメントページです: リンク

于 2012-10-16T12:21:09.003 に答える