python - 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>
解决方案
编辑: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>]
推荐阅读
- angular - 第二次导航到Angular组件时未加载
- c++ - 如何更改函数以传递变量?
- python-3.x - 如何在python中的字典中分配多个值?
- javascript - Angular 8,如何发送从服务中的 http 调用收到的用户信息并订阅另一个组件?
- java.util.concurrent - 子类覆盖超类的重入
- c# - 如何在 unix 系统上从 dlopen 加载 dotnet 核心库
- kubernetes - 禁用 Kubernetes 扇出 Ingress 的路径重写
- mysql - 更改 MySQL 表中电话号码字段的格式
- node.js - 如何使用 BigQuery nodejs 客户端库中的 BigQueryDate 类?
- c++ - 更新 RichEdit20A 时如何阻止 CDialog(mfc) 在 Invalidate 上闪烁