处理XML多行节点需解析时保留空白,如设置setIgnoringElementContentWhitespace(false)或使用minidom保留文本;2. 通过nodeValue获取含换行符的文本,用splitlines()分割并修改后以\n重新赋值;3. 输出时用toprettyxml()格式化但注意多余空白,建议lxml精确控制。关键在保留换行与输出规范。

在XML中处理多行节点,关键在于正确解析和操作包含换行或跨多行的文本内容。XML本身支持在文本节点中使用换行符,但需要确保解析器能正确读取并保留这些格式。以下是具体操作步骤。
理解多行节点的表现形式
多行节点通常指元素内的文本包含换行符(如 LF 或 CRLF),例如:
这是一段说明文字。
它跨越了多行。
这是第三行。
这种情况下,文本节点实际包含了换行符。解析时需注意是否保留空白和换行。
使用DOM解析并保留空白
大多数XML解析器默认会忽略或压缩空白字符。若要保留多行结构,需设置解析选项:
- 在Java中使用DocumentBuilder时,调用
setIgnoringElementContentWhitespace(false) - 在Python的xml.dom.minidom中,原始文本会被保留,可通过nodeValue获取完整内容
- 确保XML声明或DTD未指定忽略空白
读取和修改多行文本内容
获取多行文本后,可进行常规字符串操作:
- 遍历文本节点,使用
textContent或等效属性提取内容 - 用编程语言的字符串方法分割成行(如splitlines())
- 修改后重新赋值时,用换行符连接并写回节点
示例(Python):
import xml.dom.minidomdoc = xml.dom.minidom.parse("example.xml")
desc = doc.getElementsByTagName("description")[0]
lines = desc.firstChild.nodeValue.splitlines()
# 修改某一行
lines[1] = "更新后的第二行"
desc.firstChild.nodeValue = "\n".join(lines)
序列化时保持格式
保存修改后的XML时,若希望维持可读性:
- 启用格式化输出,如minidom的
toprettyxml() - 注意
toprettyxml()可能引入额外空白,生产环境需清洗 - 考虑使用lxml等更灵活的库控制输出格式
基本上就这些。关键是解析时保留空白,操作时按字符串处理,输出时注意格式控制。不复杂但容易忽略细节。










