VirgoMoss 2024-07-22 15:49 采纳率: 0%
浏览 13
问题最晚将于07月30日00:00点结题

如何用QDomDocument读取内容为空格的xml数据

例如XML有一个节点,内容都是空格

<ss xml:space="preserve">       </ss>

用QDomDocument读取出来是“”,QString.isNull()判断为true
用QXmlStreamReader读取出来是包含空格的正常QString字符串

有没有什么方法可以用QDomDocument读出来空格

  • 写回答

17条回答 默认 最新

  • 阿里嘎多学长 2024-07-22 15:49
    关注

    以下内容由AIGC及阿里嘎多学长共同生成、有用望采纳:


    在使用 QDomDocument 读取 XML 数据时,确实可能会遇到一些空白字符处理的问题。QDomDocument 在解析 XML 时,默认情况下会忽略空白字符,这可能导致你提到的空格节点被读取为一个空字符串。然而,有一些方法可以帮助你解决这个问题:

    1. 使用 xml:space 属性: XML 标准允许使用 xml:space="preserve" 属性来告诉解析器保留元素内的空白字符。你已经在 XML 示例中使用了这个属性,这是一个很好的开始。

    2. 检查 QDomDocument 的设置: 虽然 QDomDocument 没有直接的设置来改变对空白的处理,但是确保你使用的是最新版本的 Qt,因为新版本可能修复了一些旧版本中的问题。

    3. 使用 QXmlStreamReader 你提到使用 QXmlStreamReader 可以正确读取包含空格的字符串。QXmlStreamReader 是一个更底层的解析器,它提供了更多的控制,包括对空白字符的处理。如果 QDomDocument 不能满足你的需求,你可以考虑使用 QXmlStreamReader

    4. 自定义解析逻辑: 如果标准库中的解析器都不能满足你的需求,你可能需要编写自定义的解析逻辑。这可能涉及到逐个字符地读取 XML 数据,并根据 XML 的规则手动构建数据结构。

    5. 测试和验证: 无论你选择哪种方法,都需要进行彻底的测试,确保你的解决方案能够正确处理各种 XML 结构和情况。

    以下是一个使用 QXmlStreamReader 的示例代码,它能够正确处理包含空格的节点:

    #include <QXmlStreamReader>
    #include <QString>
    
    void readXMLWithSpaces(const QString &xmlData) {
        QXmlStreamReader reader(xmlData);
        while (!reader.atEnd()) {
            reader.readNext();
            if (reader.isStartElement()) {
                QString tag = reader.name().toString();
                if (!reader.readElementText().isEmpty()) {
                    qDebug() << "Tag:" << tag << "Content:" << reader.text();
                }
            }
        }
    }
    

    在这个示例中,readXMLWithSpaces 函数接受一个包含 XML 数据的 QString,并使用 QXmlStreamReader 来逐个元素地读取 XML。如果元素包含文本,即使文本只包含空格,reader.text() 也会返回包含空格的字符串。

    请注意,这只是一个简单的示例,你可能需要根据你的具体需求调整代码。如果你需要进一步的帮助或者有特定的问题,请随时提问。

    评论 编辑记录

报告相同问题?

问题事件

  • 已采纳回答 7月22日
  • 创建了问题 7月22日

悬赏问题

  • ¥15 乌班图ip地址配置及远程SSH
  • ¥15 怎么让点阵屏显示静态爱心,用keiluVision5写出让点阵屏显示静态爱心的代码,越快越好
  • ¥15 PSPICE制作一个加法器
  • ¥15 javaweb项目无法正常跳转
  • ¥15 VMBox虚拟机无法访问
  • ¥15 skd显示找不到头文件
  • ¥15 机器视觉中图片中长度与真实长度的关系
  • ¥15 fastreport table 怎么只让每页的最下面和最顶部有横线
  • ¥15 java 的protected权限 ,问题在注释里
  • ¥15 这个是哪里有问题啊?