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

使用qdomdocument处理html文本后出现一堆空格和回车
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
1条回答 默认 最新
关注
引自免费微信小程序:皆我百晓生
面对使用QDomDocument处理HTML文本后出现多余空格和换行的问题,这通常是由于解析器在处理HTML时的默认行为导致的。解析器倾向于规范化文本节点,包括添加空格和换行来改善可读性。要解决这个问题,可以采取几种策略:
-
避免解析器的规范化:在解析HTML前,将所有不必要的空白字符(空格、制表符、换行符)从源字符串中移除。这样,即使解析器尝试规范化,它也不会有额外的空白字符可以规范化。
-
使用
QDomText::normalize()
:遍历文档中的所有文本节点,并调用normalize()
方法。这个方法会移除多余的空白字符,将连续的空白字符压缩成一个空格。 -
自定义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的格式化,因此在处理之前确保这不会影响到你的应用需求。如果保留原始格式很重要,你可能需要更精细地控制哪些空白字符应该被保留,哪些应该被移除。
解决 无用评论 打赏 举报 编辑记录-