gpt4 book ai didi

python - 使用命名空间获取 lxml 标签属性

转载 作者:数据小太阳 更新时间:2023-10-29 01:54:30 26 4
gpt4 key购买 nike

我的 XML 看起来像:

...
<termEntry id="c1">
<langSet xml:lang="de">
...

我有代码:

from lxml import etree
...

for term_entry in root.iterfind('.//termEntry'):
print term_entry.attrib['id']
print term_entry.nsmap

for lang_set in term_entry.iterfind('langSet'):
print lang_set.nsmap
print lang_set.attrib

for some_stuff in lang_set.iterfind('some_stuff'):
...

我得到空的 nsmap 字典,我的 attrib 字典看起来像 {'{http://www.w3.org/XML/1998/namespace}lang': 'en'}

该文件在命名空间中可能不包含 xml:,或者它可能具有不同的命名空间。我怎么知道标签声明中使用了什么命名空间?事实上,我只需要获取一个 lang 属性,我不关心使用的是什么命名空间。我不想使用任何像 lang_set.attrib.values()[0] 或其他具有已知名称的字段查找这样的糟糕垃圾。

最佳答案

i just need to get a lang attribute, i don't care what namespace was used

你的问题不是很清楚,你没有提供任何完整的可运行代码示例。但是按照@mmgp 在评论中的建议进行一些字符串操作可能就足够了。

然而,xml:langrandom_prefix:lang 不同(或者只是 lang )。我认为您应该关心 namespace 。如果目标是识别适用于元素内容的自然语言,那么您应该使用 xml:lang (因为这是此属性的明确目的;请参阅 http://www.w3.org/TR/REC-xml/#sec-lang-tag)。


I just want to know where is stored the {http://www.w3.org/XML/1998/namespace} string for attributes.

重要的是要知道 xml前缀是特殊的。它是保留的(与几乎所有其他应该是任意的 namespace 前缀相反)并定义为绑定(bind)到 http://www.w3.org/XML/1998/namespace .

来自Namespaces in XML 1.0 W3C recommendation :

The prefix xml is by definition bound to the namespace name http://www.w3.org/XML/1998/namespace. It MAY, but need not, be declared, and MUST NOT be bound to any other namespace name. Other prefixes MUST NOT be bound to this namespace name, and it MUST NOT be declared as the default namespace.

xml 的其他用途前缀是 xml:spacexml:base属性。


It is really strange, if lxml does not provide any method for namespace processing

lxml 处理 namespace 很好,但是 prefixes are avoided越多越好。您将需要使用 http://www.w3.org/XML/1998/namespace进行涉及 xml 的查找时的命名空间名称前缀。

关于python - 使用命名空间获取 lxml 标签属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13871925/

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