通过id-tag解析Python查找元素中的XML

时间:2018-04-12 13:42:12

标签: python xml python-3.x xml-parsing

我正在尝试使用正则表达式来解析XML文件(在我看来,这似乎是正确的方法)。

我的XML看起来像这样:

Symbol("TerminalWidgetOptions");

要访问该文本,我正在使用:     attr = re.search('[@ id =(CALLERID | GR_BUS | label)]',line)

我想得到格式化解析xml的结果:

line='<form id="main">\n<input {disable}  style="display:none" id="CALLERID" 
value="58713780">\n<input {disable}  style="display:none" id="GR_BUS" 
value="VGH1"\n<td><input id="label" {disable} style="font- 
size:9px;width:100%;margin:0;padding:1;" type=text></td>\n</form>>'

但没有回复。

有人可以指出我做错了什么吗? 感谢

2 个答案:

答案 0 :(得分:0)

这是输出:

line = '''<form id="main">\n
<input {disable}  style="display:none" id="CALLERID" value = "58713780" >\n
<input{disable} style = "display:none" id = "GR_BUS" value = "VGH1"\n >
< td >< inputid = "label"{disable}style = "font-size: 9px;width: 100 %;margin: 0;padding: 1;" type=text></td>
</form>>'''


from bs4 import BeautifulSoup

soup = BeautifulSoup(line, "lxml")
for values in soup.findAll("input"):
    id = values["id"]
    value = values["value"]
    print(id, value)

输出:

('CALLERID', '58713780')
('GR_BUS', 'VGH1')

答案 1 :(得分:0)

首先,您的示例中的内容不是有效的XML,而是HTML。考虑到字符串中的{disable}指令,更可能是HTML模板。

其次,您的正则表达式无效,因为它没有考虑id属性周围的引号。我还假设您还需要一个值属性的捕获组,以便构建您的最终结果并考虑该值并不总是存在(即在标签ID的情况下)。

执行该操作的正则表达式为{{1}}。对于每个匹配,第一个捕获组将包含id属性的值,第三个组(如果存在)将包含value属性的值。

您可以通过选择python作为语言在https://regex101.com进行测试。