从具有特定值的xmlnode获取属性

2024-09-19 14:32:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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是{},我需要获得这个名称空间的短标识符abw。为了获得这个标识符,我必须从根标记中获取与我的targetNamespace完全相同的属性(我不能依赖targetNamespace-stringallready的标识符部分,这可能会在将来发生变化)。在

关于这个问题How to extract xml attribute using Python ElementTree我发现了如何获取由其名称给定的属性的值。但是我不知道属性名,只知道它的值,所以当我有一个值并想选择具有此值的属性时,我该怎么办?在

我想到了这样的事情:

^{pr2}$

但是root.attrib只包含elementFormDefaulttargetNamespace和{},而不是{}。在


Tags: 标记http属性schemawww空间de标识符
2条回答

字符串必须是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

代码:

^{pr2}$

输出:

abw 

使用minidom而不是ETree可以做到:

import xml.dom.minidom as DOM
tree = DOM.parse(myFile)
root = tree.documentElement
targetNamespace = root.getAttribute("targetNamespace")

d = dict(root.attributes.items())
for key in d:
    if d[key] == targetNamespace: return key

这将返回targetNamespace或{},具体取决于xsd中的第一个。当然,我们应该忽略第一种情况,但这超出了这个问题的范围。在

相关问题 更多 >