问题背景:
我有一个 XML 文件,我正在将其导入 BeautifulSoup 并进行解析。一个节点有以下内容:
<DIAttribute name="ObjectDesc" value="Line1
Line2
Line3"/>
请注意,该值在文本中包含
和
。我知道这些是回车和换行的 XML 表示。
当我导入到 BeautifulSoup 时,值会转换为以下内容:
<DIAttribute name="ObjectDesc" value="Line1
Line2
Line3"/>
您会注意到
被转换为换行符。
我的用例要求该值保持原始值。知道如何让它留下来吗?或者将其转换回来?
源代码:
python :(2.7.11)
from bs4 import BeautifulSoup #version 4.4.0
s = BeautifulSoup(open('test.xml'),'lxml-xml',from_encoding="ansi")
print s.DIAttribute
#XML file looks like
'''
<?xml version="1.0" encoding="UTF-8" ?>
<DIAttribute name="ObjectDesc" value="Line1
Line2
Line3"/>
'''
Notepad++ 说源 XML 文件的编码是 ANSI。
我尝试过的事情:
- 我已经搜索了文档但没有成功。
第 3 行的变体:
print s.DIAttribute.prettify('ascii') print s.DIAttribute.prettify('windows-1252') print s.DIAttribute.prettify('ansi') print s.DIAttribute.prettify('utf-8') print s.DIAttribute['value'].replace('\r','
').replace('\n','
') #This works, but it feels like a bandaid and will likely other problems will remain.
有什么想法吗?我感谢任何意见/建议。
最佳答案
仅作记录,首先是不正确处理
实体的库:BeautifulSoup(data ,convertEntities=BeautifulSoup.HTML_ENTITIES)
,lxml.html.soupparser.unescape
,xml.sax.saxutils.unescape
这就是有效的(在 Python 2.x 中):
import sys
import HTMLParser
## accept file name as argument, or read stdin if nothing passed
data = len(sys.argv) > 1 and open(sys.argv[1]).read() or sys.stdin.read()
parser = HTMLParser.HTMLParser()
print parser.unescape(data)
关于python - 在 Python 中处理 `
`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35856699/