我希望在xml解析时找到所有密码属性,并用字符串“password”替换它。要查找密码属性,我尝试了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>
答案 0 :(得分:0)
这将提取您需要的元素,更新属性值并转储xml结果:
import xml.etree.ElementTree as Etree
tree = Etree.parse("file.xml")
root = tree.getroot()
print(root)
z = root.findall(".//*[@password]")
for elm in z:
elm.attrib['password'] = "Password"
print(Etree.dump(root))
我只能在2.7.12上测试,因为它是我对python2唯一的版本。如果可以的话,我肯定会建议你升级,但是如果你不能的话,这应该会给你一个正确的方向。
答案 1 :(得分:0)
编辑: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>]