首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++/Qt QDomDocument:遍历所有XML标记

C++/Qt QDomDocument:遍历所有XML标记
EN

Stack Overflow用户
提问于 2016-04-20 13:13:40
回答 1查看 6.4K关注 0票数 4

我的问题是,我有一个大型XML样式文件表示为QDomDocument,我需要访问XML中多个位置上的某些标记。

我的XML看起来像这样

代码语言:javascript
运行
复制
<Mat1>
    <Name>Mat_1</Name>
    <Properties>
        <Size>10</Size>
        <SizeMod>G</SizeMod>
    </Properties>
</Mat1>
<Mat2>
    <Name>Mat_2</Name>
    <Properties>
        <Size>15</Size>
        <SizeMod>k</SizeMod>
    </Properties>
</Mat2>

我需要访问所有出现的"SizeMod“和”大小“。问题是,文件的布局将来可能会有规律的变化,我希望我的代码能够与文件的所有版本一起工作。

目前,我只是使用多个for-循环遍历所有childNodes,直到达到所需的深度,然后使用if -语句检查,如果我在正确的节点上。

但这似乎是个不好的方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-21 07:40:15

正如@hank所评论的那样,您应该使用QDomDocument::elementsByTagName(const QString &tagname)来获取文档中的元素,名称为tagname

然后,在节点上迭代以获得每个QDomNode。最后,将QDomNode转换为QDomElement

例如,我们要打印元素的文本和标记名:

代码语言:javascript
运行
复制
#include <QtXml>
#include <QtCore>

int main()
{
    QFile file(":/myxml.xml");

    file.open(QFile::ReadOnly|QFile::Text);

    QDomDocument dom;
    QString error;

    int line, column;

    if(!dom.setContent(&file, &error, &line, &column)) {
        qDebug() << "Error:" << error << "in line " << line << "column" << column;
        return -1;
    }

    QDomNodeList nodes = dom.elementsByTagName("Size");
    for(int i = 0; i < nodes.count(); i++)
    {
        QDomNode elm = nodes.at(i);
        if(elm.isElement())
        {
            qDebug() << elm.toElement().tagName()
                     << " = "
                     <<  elm.toElement().text();
        }
    }

    nodes = dom.elementsByTagName("SizeMod");
    for(int i = 0; i < nodes.count(); i++)
    {
        QDomNode elm = nodes.at(i);
        if(elm.isElement())
        {
            qDebug() << elm.toElement().tagName()
                     << " = "
                     << elm.toElement().text();
        }
    }

    return 0;
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36744988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档