2017-08-28 58 views
1

我有一个文件,其中包含一堆日志信息,包括xml。我想将xml部分解析为一个字符串对象,以便我可以在其上运行一些xpath以确保'data'元素上存在某些信息。如何从嘈杂的文件使用python解析出xml

文件解析:

Requesting event notifications... 
Receiving command objects... 
<?xml version="1.0" encoding="UTF-8"?><Root xmlns="http://schemas.com/service" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><data id="123" interface="2017.1" implementation="2016.122-SNAPSHOT" Version="2016.1.2700-SNAPSHOT"></data></Root> 
All information has been collected 
Command execution successful... 

的Python:

import re 

with open('./output.out', 'r') as outFile: 
    data = outFile.read().replace('\n','') 

regex = re.escape("<.*?>.*?<\/Root>"); 
p = re.compile(regex) 
m = p.match(data) 

if m: 
    print(m.group()) 
else: 
    print('No match') 

输出:

不匹配

我在做什么错?我怎样才能实现我的目标?任何帮助将非常感激。

回答

3

Thou shalt never use regular expressions for parsing XML/HTML。这项艰巨的任务有BeautifulSoup

import bs4 
soup = bs4.BeautifulSoup(open("output.out").read(), "lxml") 
roots = soup.findAll('root') 
#[<root xmlns="http://schemas.com/service" 
# xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
# <data id="123" implementation="2016.122-SNAPSHOT" interface="2017.1" 
# version="2016.1.2700-SNAPSHOT"></data></root>] 

roots[0]是一个XML文档。你可以用它做任何你想做的事。

+0

'BeautifulSoup'是Python 2.7兼容吗?如果不是的话,这没关系。我喜欢你发布的链接的标题:) – barthelonafan

+1

是的,它是2.7兼容的。 – DyZ