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' 现在我想在 XML 文件中搜索所有 T 节点,其中 t="a number from my list" 其中一个子节点(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 的东西,建议使用 QtCore 模块中的 QXmlStreamReader 和 QXmlStreamWriter,只是因为 QDom 和 QSax 的东西已经有一段时间没有积极维护了。

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

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

我不会将示例代码从 qt 文档复制并粘贴到此处。希望你能很好地理解它们。您还可以检查 qt 4.x 中的示例/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 方法允许您定义您的搜索模式。它可以基于元素 id、属性等等……就像 XQuery 一样。这是 QXmlQuery 文档页面: 链接

于 2012-10-16T12:21:09.003 回答