请帮我用lxml etree解析下面原型的配置文件。我试着用事件,元素用tostring。不幸的是我不需要文本,而是
之间的XML<template name>
<config>
</template>
给定属性。
我开始使用此代码,但在搜索属性时遇到键错误,因为它从开始
进行扫描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>
答案 0 :(得分: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
答案 1 :(得分:1)
您可以尝试使用get('name', default='')
代替['name']
要获取代码中的文字,请使用.text