首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Python处理`
`

用Python处理`
`
EN

Stack Overflow用户
提问于 2016-03-08 00:18:25
回答 1查看 1.1K关注 0票数 4

问题背景:

我有一个XML文件,我将它导入到BeautifulSoup中并通过它进行解析。一个节点具有以下功能:

代码语言:javascript
复制
<DIAttribute name="ObjectDesc" value="Line1&#xD;&#xA;Line2&#xD;&#xA;Line3"/>

注意,该值在文本中包含&#xD;&#xA;。我理解这是运输、返回和行提要的XML表示。

当我导入到BeautifulSoup中时,该值将转换为以下内容:

代码语言:javascript
复制
<DIAttribute name="ObjectDesc" value="Line1
Line2
Line3"/>

您会注意到,&#xd;&#xA;被转换为换行符。

我的用例要求该值保持原值。知道怎么才能让它留下来吗?还是把它改回来?

源代码:

python:(2.7.11)

代码语言:javascript
复制
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&#xD;&#xA;Line2&#xD;&#xA;Line3"/>
'''

Notepad++说源XML文件的编码是ANSI。

我尝试过的事情:

  • 我仔细查过文件,但没有任何结果。
  • 第3行的变动: 打印s.DIAttribute.prettify('ascii')打印s.DIAttribute.prettify('windows-1252')打印s.DIAttribute.prettify('ansi')打印s.DIAttribute.prettify('utf-8')打印。 ).replace(‘\n’,‘ #这是可行的,但感觉就像绷带,而且可能还会有其他问题。

有人有什么想法吗?我感谢任何意见/建议。

EN

回答 1

Stack Overflow用户

发布于 2016-07-04 15:09:44

为了记录在案,首先没有正确处理&#xa;实体的库:BeautifulSoup(data ,convertEntities=BeautifulSoup.HTML_ENTITIES)lxml.html.soupparser.unescapexml.sax.saxutils.unescape

这就是工作原理(在Python2.x中):

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35856699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档