逐行读取XML文件中的数据

时间:2012-11-20 16:53:05

标签: python

我试图找到一个链接,其中包含http或//或\并在找到后用href标记环绕但是从xml读取的数据中逐行读取..我看到输出与每个字母分开..请看下面的输入和输出..谁能建议我哪里出错?

 INput:-http://pastebin.com/p9H8GQt4
 Currentoutput:- http://pastebin.com/7428jK63

sanity_results = sanity_results.replace('\n','<br>\n')
return sanity_results

def main ():
resultslis=[]
xmlfile = open('results.xml','r')
contents = xmlfile.read()
testresults=getsanityresults(contents)
#print testresults
for line in testresults:
    #print line
    line = line.strip()
    #print line
    line = re.sub(r'(http://[^\s]+|//[^\s]+|\\\\[^\s]+)', r'<a href="\1">\1</a>', line)
    print line       
    resultslis.append(line)
print resultslis

if __name__ == '__main__':
main()

3 个答案:

答案 0 :(得分:4)

您想使用像

这样的XML解析器
  • elementree
  • LXML
  • minidom命名

等。用于解析任何类型的XML文件。自己解析XML - 尤其是逐行解析XML容易出错。特别是正则表达式的使用是按设计破解的。不要那样做。

要聪明并改用XML解析器。

答案 1 :(得分:2)

您正在遍历字符串,而不是遍历文件。

如果要迭代字符串中的行,请使用str.splitlines

>>> text ='''first
... second
... '''
>>> for line in text.splitlines():
...     print(line)
... 
first
second
>>> for char in text:
...     print(char)
... 
f
i
r
s
t


s
e
c
o
n
d

无论如何,我建议你使用XML解析器。 stdlib已经提供了一个,并且还有很多额外的库。

答案 2 :(得分:0)

问题在于:

contents = xmlfile.read()

返回一个字符串;因此,迭代对字符进行操作。用readlines()替换read(),你就有了这些行。