Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python lxml:强制将换行符转换为实体_Python_Xml_Lxml - Fatal编程技术网

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&#13;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', '&#13;')

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&#10;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', '&#13;')

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&#10;two
</a>

1
;二

注意,换行符实际上应该映射到

用于回车或
\r
)但我不会争辩,因为我无法在本地测试FCPXML格式。

出于好奇,为什么要将换行符转换为HTML实体?@supersam654一个特定的应用程序(Premiere Pro/FCPXML格式)会忽略“普通”换行符。出于好奇,为什么要将换行符转换为HTML实体?@supersam654特定应用程序(Premiere Pro/FCPXML格式)会忽略“普通”换行符。在这种情况下,此操作有效,但不会保留xmlns属性(lxml解析器)或字母大小写(lxml解析器)。我的用例(Excel2002XML(不问))既需要这些,也需要显式的 ;对于换行符…在这种情况下可以使用,但不保留xmlns属性(lxml解析器)或lettercase(lxml解析器)。我的用例(Excel2002XML(不问))既需要这些,也需要显式的 ;对于新行。。。