You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LXML自动转换Windows换行符:是否为特性?能否保留原始文本?

问题

尝试解析一段包含Windows换行符(CR+LF组合)的XML字符串:

from lxml.etree import XML

root = XML('<root>_\r\n_\n_</root>')
print(
    [ord(char) for char in root.text],
)

但得到的文本中却只包含Linux换行符(LF字符):

[95, 10, 95, 10, 95]

请问这是有文档记录的特性吗?是否可以修改其行为以获取未修改的原始文本?当前使用的是最新版本的LXML 5.2.2。

注:相关链接问题与我的问题不相关——它讨论的是Fedora 17和18之间的软件变更,而此行为实际上是XML标准定义的。且该问题的答案并未解决我的问题,它建议将手动添加的换行符替换为三引号字符串。

解答
  • 这是XML标准明确规定的行为:根据XML 1.0规范,解析器必须将所有的CR+LF(\r\n)和单独的CR(\r)统一转换为LF(\n)。lxml作为合规的XML解析器,自然遵循这个规则。
  • lxml的官方文档中明确记录了这一默认行为:换行符规范化是XML解析流程中的标准步骤,属于合规解析的一部分。
  • 无法通过修改lxml的解析配置来跳过换行符规范化,因为这违反XML标准。如果需要保留原始的CR+LF格式,可以通过以下方式处理:
    • 预处理XML字符串:将\r\n替换为自定义占位符(例如__CRLF__),完成XML解析后再将占位符替换回\r\n;
    • 直接处理原始字符串:放弃使用XML解析器的结构化提取,自行读取和处理原始文本,但这种方式会丢失XML解析的结构化能力。

内容的提问来源于stack exchange,提问作者Jeyekomon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 07:42:40