gpt4 book ai didi

python - 从 xml-node 获取具有特定值的属性

转载 作者:太空宇宙 更新时间:2023-11-03 16:03:06 26 4
gpt4 key购买 nike

我有一个 XSD 文件,我需要在其中获取根标记中定义的命名空间:

<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:abw="http://www.liegenschaftsbestandsmodell.de/ns/abw/1.0.1.0" xmlns:adv="http://www.adv-online.de/namespaces/adv/gid/6.0" xmlns:bfm="http://www.liegenschaftsbestandsmodell.de/ns/bfm/1.0" xmlns:gml="http://www.opengis.net/gml/3.2" xmlns:sc="http://www.interactive-instruments.de/ShapeChange/AppInfo" elementFormDefault="qualified" targetNamespace="http://www.liegenschaftsbestandsmodell.de/ns/abw/1.0.1.0" version="1.0.1.0">
<!-- elements -->
</schema>

现在,由于此架构定义的 targetNamespace"http://www.liegenschaftsbestandsmodell.de/ns/abw/1.0.1.0" 我需要获取此命名空间的短标识符 - 为 abw。要获取此标识符,我必须从根标记中获取与我的 targetNamespace 具有完全相同值的属性(我不能依赖于 targetNamespace 中的标识符) code>-string 已准备好,将来可能会改变)。

关于这个问题How to extract xml attribute using Python ElementTree我找到了如何获取由名称给出的属性的值。但是我不知道属性名称,只知道它的值,那么当我有一个值并且想要选择具有该值的属性时我该怎么办?

我想到了这样的事情:

for key in root.attrib.keys():
if(root.attrib[key] == targetNamespace):
return root.attrib[key]

但是root.attrib仅包含elementFormDefaulttargetNamespaceversion,但不包含xmlns: abw

最佳答案

字符串必须是Unicode,否则会出现错误

Traceback (most recent call last):
File "<pyshell#62>", line 1, in <module>
it = etree.iterparse(StringIO(xml))
TypeError: initial_value must be unicode or None, not str

代码:

>>> from io import StringIO
>>> from xml.etree import ElementTree
>>> xml=u"""<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:abw="http://www.liegenschaftsbestandsmodell.de/ns/abw/1.0.1.0" xmlns:adv="http://www.adv-online.de/namespaces/adv/gid/6.0" xmlns:bfm="http://www.liegenschaftsbestandsmodell.de/ns/bfm/1.0" xmlns:gml="http://www.opengis.net/gml/3.2" xmlns:sc="http://www.interactive-instruments.de/ShapeChange/AppInfo" elementFormDefault="qualified" targetNamespace="http://www.liegenschaftsbestandsmodell.de/ns/abw/1.0.1.0" version="1.0.1.0">
<!-- elements -->
</schema>"""
>>> ns = dict([
node for _, node in ElementTree.iterparse(
StringIO(xml), events=['start-ns']
)
])
>>> for k,v in ns.iteritems():
if v=='http://www.liegenschaftsbestandsmodell.de/ns/abw/1.0.1.0':
print k

输出:

abw 

关于python - 从 xml-node 获取具有特定值的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40123627/

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