Python ElementTree 默认命名空间?

Python ElementTree default namespace?(Python ElementTree 默认命名空间?)
本文介绍了Python ElementTree 默认命名空间?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

限时送ChatGPT账号..

有没有办法在 python ElementTree 中定义默认/无前缀命名空间?这似乎不起作用...

Is there a way to define the default/unprefixed namespace in python ElementTree? This doesn't seem to work...

ns = {"":"http://maven.apache.org/POM/4.0.0"}
pom = xml.etree.ElementTree.parse("pom.xml")
print(pom.findall("version", ns))

这也不是:

ns = {None:"http://maven.apache.org/POM/4.0.0"}
pom = xml.etree.ElementTree.parse("pom.xml")
print(pom.findall("version", ns))

确实如此,但我必须为每个元素添加前缀:

This does, but then I have to prefix every element:

ns = {"mvn":"http://maven.apache.org/POM/4.0.0"}
pom = xml.etree.ElementTree.parse("pom.xml")
print(pom.findall("mvn:version", ns))

在 OSX 上使用 Python 3.5.

Using Python 3.5 on OSX.

如果答案是否",您仍然可以获得赏金 :-).我只是想从一个花了很多时间使用它的人那里得到一个明确的不".

if the answer is "no", you can still get the bounty :-). I just want a definitive "no" from someone who's spent a lot of time using it.

推荐答案

注意:对于 Python 3.8+,请参阅 这个答案.

NOTE: for Python 3.8+ please see this answer.

没有直接的方法可以透明地处理默认命名空间.正如您已经提到的,为空命名空间分配一个非空名称是一种常见的解决方案:

There is no straight-forward way to handle the default namespaces transparently. Assigning the empty namespace a non-empty name is a common solution, as you've already mentioned:

ns = {"mvn":"http://maven.apache.org/POM/4.0.0"}
pom = xml.etree.ElementTree.parse("pom.xml")
print(pom.findall("mvn:version", ns))

请注意,lxml.etree 不允许显式使用空命名空间.你会得到:

Note that lxml.etree does not allow the use of empty namespaces explicitly. You would get:

ValueError:ElementPath 中不支持空的命名空间前缀

ValueError: empty namespace prefix is not supported in ElementPath


您可以通过 在加载 XML 输入数据时删除默认命名空间定义:

import xml.etree.ElementTree as ET
import re
 
with open("pom.xml") as f:
    xmlstring = f.read()
 
# Remove the default namespace definition (xmlns="http://some/namespace")
xmlstring = re.sub(r'sxmlns="[^"]+"', '', xmlstring, count=1)
 
pom = ET.fromstring(xmlstring) 
print(pom.findall("version"))

这篇关于Python ElementTree 默认命名空间?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

相关文档推荐

How do I make a list of all members in a discord server using discord.py?(如何使用 discord.py 列出不和谐服务器中的所有成员?)
how to change discord.py bot activity(如何更改 discord.py 机器人活动)
Issues with getting VoiceChannel.members and Guild.members to return a full list(让 VoiceChannel.members 和 Guild.members 返回完整列表的问题)
Add button components to a message (discord.py)(将按钮组件添加到消息(discord.py))
on_message() and @bot.command issue(on_message() 和@bot.command 问题)
How to edit a message in discord.py(如何在 discord.py 中编辑消息)