gpt4 book ai didi

python - 如何使用ElementTree按属性值查找xml元素

转载 作者:太空宇宙 更新时间:2023-11-03 21:32:21 24 4
gpt4 key购买 nike

尝试解析 XML具有 namespace 和属性。我希望通过给定属性 ( id ) 检索元素。

文档指定但是

[@attrib] Selects all elements that have the given attribute.

[@attrib='value'] Selects all elements for which the given attribute has the given value. The value cannot contain quotes.

当给定属性名称和值或仅给定属性名称时,以下解决方案都不会返回元素

from lxml import etree
tree = etree.parse("es.xml")
root = tree.getroot()

print root.findall('file/body/trans-unit', root.nsmap)


# Unable to fetch all with attribute == id
print root.findall('file/body/trans-unit[@id]', root.nsmap)

# Unable to fetch element with id = 111
print root.find('file/body/trans-unit[@id="111"]', root.nsmap)

XML

<?xml version="1.0" encoding="UTF-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2">
<file original="PDDDD" source-language="en" datatype="plaintext" target-language="es">
<header>
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="10.1" build-num="10B61"/>
</header>
<body>
<trans-unit id="111">
<source>Welcome!</source>
<target>Welcome!</target>
<note>Class = "UILabel"; text = "Welcome!"; ObjectID = "7oz-Od-KDt";</note>
</trans-unit>
</body>
</file>
</xliff>

最佳答案

我不知道如何使用 {None: "urn:oasis:names:tc:xliff:document:1.2"} 来做到这一点root.nsmap 的命名空间...

但是,如果您重新定义 namespace 映射,例如

ns = {"n": "urn:oasis:names:tc:xliff:document:1.2"}

然后就可以了

root.find('.//n:trans-unit[@id="111"]', ns)

关于python - 如何使用ElementTree按属性值查找xml元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53454903/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com