我有一个包含损坏的XML的文件,在我想摆脱的行尾有一些垃圾字符。这些垃圾字符不允许我使用Python的XML解析器。例如:
<request><pair><name>q</name><value><![CDATA[LOL]]></value></pair><pair><name>start</name><value>1</value></pair></request>�J I�i�Y�Y��'z�3�u�J�5��}���#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>
只有一行
代码:
awk '/<request>/ , /<\/request>/' test.txt
不起作用。
我的目的是在这种情况下,当名称为“q”(LOL和LOL2)时提取值。因此,如果可以轻松完成,我不会为删除垃圾字符而烦恼。
感谢您的时间。
答案 0 :(得分:3)
您可以使用lxml和xpath表达式提取数据 -
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'
答案 1 :(得分:2)
这可行,但它可能不是最有效的方法:
>>> f = open('x.txt','r')
>>> z = ["%s</request>" % x.split('</request>')[0] for x in f.readlines()]
答案 2 :(得分:1)
这将返回文件,包括行分隔符,没有任何垃圾字符。 (注意:“with”语句适用于Python 2.6+,以前版本只需打开(),然后使用.close()文件)
import re
clean = ''
with open('x.txt','r') as f:
clean = "".join([ line[:re.search('<\/request>',line).end()] for line in f ])