l1234rs 2024-06-19 21:24 采纳率: 0%
浏览 5

使用qdomdocument处理html文本后出现一堆空格和回车

想把textedit里的内容通过html的形式进行处理,我把textedit的内容转为html后填到qdomdocument中
但即便啥都没干,直接转回成qstring后还是会多出几块空格和回车。想问下有没有碰到过这样的情况

  • 写回答

1条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-06-19 21:24
    关注

    引自免费微信小程序:皆我百晓生

    面对使用QDomDocument处理HTML文本后出现多余空格和换行的问题,这通常是由于解析器在处理HTML时的默认行为导致的。解析器倾向于规范化文本节点,包括添加空格和换行来改善可读性。要解决这个问题,可以采取几种策略:

    1. 避免解析器的规范化:在解析HTML前,将所有不必要的空白字符(空格、制表符、换行符)从源字符串中移除。这样,即使解析器尝试规范化,它也不会有额外的空白字符可以规范化。

    2. 使用 QDomText::normalize():遍历文档中的所有文本节点,并调用normalize()方法。这个方法会移除多余的空白字符,将连续的空白字符压缩成一个空格。

    3. 自定义XML处理器:Qt允许你使用自定义的XML处理器,这样你可以在解析过程中控制如何处理空白字符。但是,这种方法比较复杂,适用于需要高级控制的情况。

    下面是一个示例代码,展示了如何使用第二种策略——遍历并规范化文本节点:

    #include <QDomDocument>
    #include <QString>
    
    void normalizeDocument(QDomDocument &doc) {
        // 获取文档的所有元素节点
        QDomNodeList nodeList = doc.documentElement().childNodes();
        
        for (int i = 0; i < nodeList.count(); ++i) {
            QDomNode node = nodeList.at(i);
            
            if (node.isText()) {
                // 如果是文本节点,则调用normalize()
                QDomText textNode = node.toText();
                textNode.normalize();
            } else if (node.isElement()) {
                // 如果是元素节点,递归调用
                QDomElement elementNode = node.toElement();
                normalizeDocument(elementNode.ownerDocument());
            }
        }
    }
    
    int main() {
        QString htmlContent = "<div>Hello World!\n\t<p>This is a test.</p>\r\n</div>";
        QDomDocument doc;
        doc.setContent(htmlContent);
        
        // 调用函数规范化文档
        normalizeDocument(doc);
        
        // 输出处理后的HTML
        qDebug() << doc.toString();
        
        return 0;
    }
    

    这段代码首先定义了一个normalizeDocument函数,用于遍历文档并规范化文本节点。然后,在main函数中,创建了一个QDomDocument实例,并使用setContent方法解析HTML字符串。之后调用normalizeDocument函数来规范化文档,最后输出处理后的HTML。

    注意,规范化操作可能会影响到HTML的格式化,因此在处理之前确保这不会影响到你的应用需求。如果保留原始格式很重要,你可能需要更精细地控制哪些空白字符应该被保留,哪些应该被移除。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 6月19日

悬赏问题

  • ¥15 模电中二极管,三极管和电容的应用
  • ¥15 关于模型导入UNITY的.FBX: Check external application preferences.警告。
  • ¥15 气象网格数据与卫星轨道数据如何匹配
  • ¥100 java ee ssm项目 悬赏,感兴趣直接联系我
  • ¥15 微软账户问题不小心注销了好像
  • ¥15 x264库中预测模式字IPM、运动向量差MVD、量化后的DCT系数的位置
  • ¥15 curl 命令调用正常,程序调用报 java.net.ConnectException: connection refused
  • ¥20 关于web前端如何播放二次加密m3u8视频的问题
  • ¥15 使用百度地图api 位置函数报错?
  • ¥15 metamask如何添加TRON自定义网络