使用Python中的Etree解析XML配置文件
请帮我用lxml etree解析下面这个配置文件的原型。我尝试过用for event, element和tostring的方法。不幸的是,我不需要文本,而是需要
<template name>
<config>
</template>
某个特定属性之间的XML。
我开始写了这段代码,但在查找属性时遇到了键错误,因为它是从头开始扫描的。
config_tree = etree.iterparse(token_template_file)
for event, element in config_tree:
if element.attrib['name']=="ad auth":
print ("attrib reached. get XML before child ends")
由于我对XML和Python还是个新手,所以不太确定该怎么做。这里是配置文件:
<Templates>
<template name="config1">
<request>
<password>pass</password>
<userName>username</userName>
<appID>someapp</appID>
</request>
</template>
<template name="config2">
<request>
<password>pass1</password>
<userName>username1</userName>
<appID>someapp</appID>
</request>
</template>
</Templates>
提前谢谢你们!
期望的输出:
比如用户请求config2,那么输出应该是这样的:
<request>
<password>pass1</password>
<userName>username1</userName>
<appID>someapp</appID>
</request>
(我通过httplib2把这个XML发送到服务器进行初始认证)
最终代码:
感谢FC和Constantnius。这里是最终的代码:
config_tree = etree.parse(token_template_file)
for template in config_tree.iterfind("template"):
if template.get("name") == "config2":
element = etree.tostring(template.find("request"))
print (template.get("name"))
print (element)
输出:
config2
<request>
<password>pass1</password>
<userName>username1</userName>
<appID>someapp</appID>
</request>
2 个回答
1
你可以试试用 get('name', default='')
代替 ['name']
这个写法。
如果想获取标签里的文本,可以使用 .text
。
1
你可以试着遍历XML中的所有template
元素,然后用下面的代码来解析它们:
for template in root.iterfind("template"):
name = template.get("name")
request = template.find(requst)
password = template.findtext("request/password")
username = ...
...
# Do something with the values