Python lxml:强制将换行符转换为实体
是否有一种方法可以将文本元素中的换行符输出为Python lxml:强制将换行符转换为实体,python,xml,lxml,Python,Xml,Lxml,是否有一种方法可以将文本元素中的换行符输出为 实体? 当前,换行符按原样插入到输出中: from lxml import etree from lxml.builder import E etree.tostring(E.a('one\ntwo'), pretty_print=True) b'<a>one\ntwo</a>\n' 从lxml导入etree 从lxml.builder导入E etree.tostring(例如('one\ntwo'),pretty\u
代码>实体?
当前,换行符按原样插入到输出中:
from lxml import etree
from lxml.builder import E
etree.tostring(E.a('one\ntwo'), pretty_print=True)
b'<a>one\ntwo</a>\n'
从lxml导入etree
从lxml.builder导入E
etree.tostring(例如('one\ntwo'),pretty\u print=True)
“一个\n两个\n”
期望输出:
b'<a>one two</a>\n'
b'one
;两个\n'
查看后,似乎无法强制将某些字符打印为转义实体。另外,转义的字符列表似乎因输出编码而异
综上所述,我将在lxml
的基础上使用:
from bs4 import BeautifulSoup as Soup
from xml.sax.saxutils import escape
def extra_entities(s):
return escape(s).replace('\n', ' ')
soup = Soup("<a>one\ntwo</a>", 'lxml-xml')
print(soup.prettify(formatter=extra_entities))
从bs4导入BeautifulSoup作为汤
从xml.sax.saxutils导入转义
def额外实体:
返回转义。替换(“\n”、“13;”)
soup=soup(“一个\n两个”,“lxml”)
打印(soup.prettify(格式化程序=额外实体))
输出:
<?xml version="1.0" encoding="utf-8"?>
<a>
one two
</a>
1
;二
注意,换行符实际上应该映射到
(
;
用于回车或\r
)但我不会争辩,因为我无法在本地测试FCPXML格式。在查看了之后,似乎无法强制将某些字符打印为转义实体。另外,转义的字符列表似乎因输出编码而异
综上所述,我将在lxml
的基础上使用:
from bs4 import BeautifulSoup as Soup
from xml.sax.saxutils import escape
def extra_entities(s):
return escape(s).replace('\n', ' ')
soup = Soup("<a>one\ntwo</a>", 'lxml-xml')
print(soup.prettify(formatter=extra_entities))
从bs4导入BeautifulSoup作为汤
从xml.sax.saxutils导入转义
def额外实体:
返回转义。替换(“\n”、“13;”)
soup=soup(“一个\n两个”,“lxml”)
打印(soup.prettify(格式化程序=额外实体))
输出:
<?xml version="1.0" encoding="utf-8"?>
<a>
one two
</a>
1
;二
注意,换行符实际上应该映射到
代码>(
;
用于回车或\r
)但我不会争辩,因为我无法在本地测试FCPXML格式。出于好奇,为什么要将换行符转换为HTML实体?@supersam654一个特定的应用程序(Premiere Pro/FCPXML格式)会忽略“普通”换行符。出于好奇,为什么要将换行符转换为HTML实体?@supersam654特定应用程序(Premiere Pro/FCPXML格式)会忽略“普通”换行符。在这种情况下,此操作有效,但不会保留xmlns属性(lxml解析器)或字母大小写(lxml解析器)。我的用例(Excel2002XML(不问))既需要这些,也需要显式的
;对于换行符…在这种情况下可以使用,但不保留xmlns属性(lxml解析器)或lettercase(lxml解析器)。我的用例(Excel2002XML(不问))既需要这些,也需要显式的
;对于新行。。。