2

请帮助我使用 lxml etree 解析以下原型的配置文件。我尝试使用 for 事件,使用 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>
4

2 回答 2

1

您可以尝试遍历templateXML 中的所有元素并使用以下代码解析它们:

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
于 2011-08-18T13:50:12.603 回答
1

您可以尝试使用get('name', default='')而不是['name']

要获取标签中的文本,请使用.text

于 2011-08-18T13:53:33.917 回答