首页 > 解决方案 > ElementTree.findall 不返回

问题描述

我想在 xml 解析时找到所有密码属性并将其替换为字符串“密码”。为了找到密码属性,我尝试了 findall(),但它返回“无”。

Python版本:python2.6

示例代码:

from xml.etree.ElementTree import ElementTree
tree = ElementTree()
a= tree.parse("/home/xxxx/securityfile_test.xml")
z = tree.findall(".//password")
print z

有人可以帮忙吗

示例 xml

<?xml version="1.0" encoding="UTF-8"?>
<security xmlns="http:xxxxx">

  <group name="Abc" description="xxxxx.">
    <rMember ref="A"/>
  </group>
  <user name="yyyy" password="**####***">
    <gMember ref="A"/>
  </user>
  <group name="oooo" description="XXXXx">
    <rMember ref="O"/>
  </group>
   <user name="zzzz" password="****###***">
    <gMember ref="A"/>
  </user>
  </security>

标签: pythonxmlxpath

解决方案


编辑:OP 使用的是 Python 2.6,这个答案只对 Python 2.7+ 有效

请参阅元素树文档

要根据属性选择元素,您需要使用不同的语法。如果您使用:

z = tree.findall(".//*[@password]")

这将起作用。表示“*选择所有元素”,[@password] 表示“使用密码属性”。

使用 Python 2.7.12 对 XML 文件的结果:

[<Element '{http:xxxxx}user' at 0x585ad30>, <Element '{http:xxxxx}user' at 0x585ae48>]

推荐阅读