使用Qt处理指定节点的xml文件

该代码示例展示了如何使用Qt的QXmlStreamReader类来解析XML文件,特别是提取特定标签的内容。函数parseTags()遍历XML文档,找到并返回指定标签及其内容的映射。在main()函数中,这个功能被用于查找并打印名为title的标签内容。
摘要由CSDN通过智能技术生成

假如我们有一个示例xml文件

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <person>
        <name>John</name>
        <age>30</age>
        <address>
            <street>Main Street</street>
            <city>New York</city>
        </address>
    </person>
    <person>
        <name>Jane</name>
        <age>25</age>
        <address>
            <street>First Street</street>
            <city>San Francisco</city>
        </address>
    </person>
</root>

Qt代码

#include <QCoreApplication>
#include <QFile>
#include <QXmlStreamReader>
#include <QDebug>
#include <QMap>

// 解析指定名称的标签及其嵌套的子标签,返回标签名称和内容的映射
QMap<QString, QString> parseTags(QXmlStreamReader& xml, const QString& tagName)
{
    QMap<QString, QString> tagContents;
    QString currentTag = "";        // 当前标签名称
    QString currentContent = "";    // 当前标签内容
    while (!xml.atEnd() && !xml.hasError()) {
        xml.readNext();            // 读取下一个 XML 元素
        if (xml.isStartElement()) { // 当前元素是标签的开始标记
            currentTag = xml.name().toString(); // 记录标签名称
        } else if (xml.isEndElement() && currentTag == tagName) { // 当前元素是标签的结束标记,且标签名称与指定名称相同
            tagContents.insert(currentTag, currentContent.trimmed()); // 存储标签名称和内容到映射中
            currentTag = "";         // 重置当前标签名称
            currentContent = "";     // 重置当前标签内容
        } else if (xml.isCharacters() && !xml.isWhitespace()) { // 当前元素是标签的文本内容
            currentContent += xml.text().toString(); // 记录标签的文本内容
        }
    }
    return tagContents;
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QFile file("example.xml");  // 打开 XML 文件
    if (!file.open(QFile::ReadOnly | QFile::Text)) {
        qDebug() << "Error: Cannot read file " << file.fileName()
                 << ": " << file.errorString();
        return -1;
    }

    QXmlStreamReader xml(&file); // 创建 XML 解析器

    QString tagName = "title"; // 指定要解析的标签名称
    QMap<QString, QString> tagContents = parseTags(xml, tagName); // 解析指定名称的标签及其嵌套的子标签
    qDebug() << "Number of <" << tagName << "> tags found: " << tagContents.size(); // 输出找到的标签数量
    for (auto i = tagContents.begin(); i != tagContents.end(); ++i) { // 遍历所有找到的标签名称和内容
        qDebug() << "Content of <" << i.key() << ">: " << i.value(); // 输出标签名称和内容
    }

    return a.exec();
}
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值