首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >从python中的行/健壮的XML解析器中删除垃圾字符

从python中的行/健壮的XML解析器中删除垃圾字符
EN

Stack Overflow用户
提问于 2012-01-05 11:38:39
回答 3查看 1.7K关注 0票数 1

我有一个包含损坏的XML的文件,在行尾有一些我想要清除的垃圾字符。这些垃圾字符不允许我使用Python的XML解析器。示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<request><pair><name>q</name><value><![CDATA[LOL]]></value></pair><pair><name>start</name><value>1</value></pair></request>J I�i�YY��'z�3�u�J5��}���#Q/k;!�ˑ�9Q){_������ŐF
<request><pair><name>q</name><value><![CDATA[LOL2]]></value></pair><pair><name>start</name><value>1</value></pair></request>4/lIT�l��'�c�Oֲ�{;��_?��(>͏Y�mP��

如何删除</request>后的垃圾字符?或者换句话说,如何删除</request><request>之间的字符串?

请注意,从<request></request>只有一行,所以

代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
awk '/<request>/ , /<\/request>/' test.txt

不起作用。

我的目的是提取名称为"q“时的值(在本例中为LOL和LOL2)。因此,如果可以很容易地做到这一点,我就不会为删除垃圾字符而烦恼。

谢谢您抽时间见我。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-01-05 11:58:01

您可以使用lxml和xpath表达式提取数据-

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import lxml
from lxml import etree
source_xml = " path to your xml file"
et = etree.parse(source_xml)
value = et.xpath("//document/request/pair[name='q']/value/text()")
print " ".join(value) 

我使用给定的xml示例尝试了一下,我的输出是'LOL LOL2'

票数 4
EN

Stack Overflow用户

发布于 2012-01-05 12:09:38

这是可行的,但这可能不是最有效的方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> f = open('x.txt','r')
>>> z = ["%s</request>" % x.split('</request>')[0] for x in f.readlines()]
票数 2
EN

Stack Overflow用户

发布于 2012-01-05 12:22:19

这将返回文件,包括行分隔符,没有任何垃圾字符。(注意:"with“语句是针对Python 2.6+的,对于以前的版本,只需打开(),然后打开.close()文件)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import re
clean = ''
with open('x.txt','r') as f:
  clean = "".join([ line[:re.search('<\/request>',line).end()] for line in f ])
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8741857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文