- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我找不到信息,如何使用命名空间解析我的 XML:
我有这个 xml:
<par:Request xmlns:par="http://somewhere.net/actual">
<par:actual>blabla</par:actual>
<par:documentType>string</par:documentType>
</par:Request>
并尝试解析它:
dom = ET.parse(u'C:\\filepath\\1.xml')
rootxml = dom.getroot()
for subtag in rootxml.xpath(u'//par:actual'):
#do something
print(subtag)
并得到异常,因为它不知道 namespace 前缀。是否有解决该问题的最佳方法,计算该脚本将不知道它将要解析的文件和将要搜索的标签?
搜索网络和 stackoverflow 我发现,如果我会在那里添加:
namespace = {u'par': u"http://somewhere.net/actual"}
for subtag in rootxml.xpath(u'//par:actual', namespaces=namespace):
#do something
print(subtag)
行得通。完美的。但是我不知道我将解析哪个 XML,并且我的脚本也不知道搜索标记(例如 //par:actual
)。因此,我需要找到以某种方式从 XML 中提取 namespace 的方法。
我找到了很多方法,如何提取命名空间URI,比如:
print(rootxml.tag)
print(rootxml.xpath('namespace-uri(.)'))
print(rootxml.xpath('namespace-uri(/*)'))
但是我应该如何提取前缀来创建 ElementTree 需要我提供的字典?我不想在 xml 主体上使用正则表达式怪物来提取前缀,我相信必须存在支持的方法,不是吗?
也许必须存在一些方法让我通过 ETree 命名空间从 XML 中提取作为字典(正如 ETree 想要的那样!)而无需手动操作?
最佳答案
您不能依赖根元素上的命名空间声明:无法保证声明会在那里,或者文档始终具有相同命名空间的相同前缀。假设您将通过某种方式传递要搜索的标记(因为您说脚本不知道它),您还应该提供一种传递 namespace 映射的方式。或者使用 James Clark 表示法,例如 {http://somewhere.net/actual}actual
(ETXPath
支持此语法,而“普通”xpath 不支持,但如果不需要完整的 xpath,也可以使用其他方法,例如 .findall()
)
如果您根本不关心前缀,您也可以在 xpath 中使用 local-name()
函数,例如。 //*[local-name()="actual"]
(但您不会“真的”确定它是正确的“actual”)
关于带有 xpath 的 python etree 和带有前缀的命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26991957/
lxml提供了一些不同的函数来解析字符串。其中两个,etree.fromstring()和 etree.XML() ,看起来很像。前者的文档字符串说它用于解析“字符串”,而后者是“字符串常量”。此外,
我有一个使用 lxml.etree 解析 XML 的脚本: from lxml import etree parser = etree.XMLParser(load_dtd=True, resolve
我一直在将我的一些原始 xml.etree.ElementTree (ET) 代码转换为 lxml.etree (lxmlET )。幸运的是,两者之间有很多相似之处。 但是,我确实偶然发现了一些我在任
是否有任何解决方案可以添加不带前缀的命名空间(我的意思是这些 ns0、ns1),它们适用于所有 etree 实现,或者每个实现都有可行的解决方案? 目前我有以下解决方案: lxml - 元素的 nsm
我正在使用 aws 的 Alexa api,但我发现很难解析结果以获得我想要的内容 alexa api 返回一个对象树 我使用此代码来打印树 from lxml import etree root
当涉及到模块/库时,为了可读性,我喜欢在 python 中使用完整的命名空间。我想知道为什么这对 xml 库不起作用。我认为 import xml 还将导入 etree 和命名空间中的所有其他内容。至
我有一个从 etree 元素返回列表的函数,但它不会查看嵌套元素。 (我正在
尝试从 serpscrap 包运行示例 .py 时出现错误。 我在 Pythonista 中使用 iPhoneX。 如有任何帮助,我们将不胜感激。 这是回溯 Traceback (most recen
如何删除或移除 server1 的所有条目,包括标签?我尝试使用 etree 删除功能,但它没有帮助
我试图将多个文件写入一个目录,每个文件之间几乎没有变化(例如增量ID号)当我尝试运行我的程序时,它在写入大约5个文件后失败。但是当我再次尝试并重新选择源文件时,它就有效了。这是我的代码: if not
如何在 Python xml.etree 中克隆 Element 对象?我正在尝试按程序移动和复制(然后修改它们的属性)节点。 最佳答案 您可以使用 copy.deepcopy()制作元素的副本。 (
我正在创建一个简单的脚本来使用特定模式解析、验证、修复和重新打印 XML 文件。整个过程运行良好,但问题是当我打印修改后的 ElementTree 时,它会删除我所有的实体引用。 这是简化的 py
xml文件结构如下 我的解析器首先获取所有 元素 from lxml import etr
在Relationship下,我只想保留具有TO_FDN="FtpServer=,并删除所有其他内容。如何在 python 2.6 中使用 etree 来做到这一点?
尝试使用 lxml 生成 xml 文件。 在 API 文档中指出 xmlfile 类存在: http://lxml.de/api/lxml.etree.xmlfile-class.html 我使用导入
我想在 Python 中创建一个像这样的元素树: 我想将其用作一个空模板,以便稍后使用。但是,我无法插入或附加多个 元素到元素,不过 etree.SubElement作品。更具体
我有一个脚本,它使用 xml.etree.ElementTree 来解析 XML 文件,并且应该向元素添加一个子元素。我有两种方法,这两种方法在技术上都有效,但当我使用 ET.dump(root) 转
我有一个 XML 格式的 ISM 文件(InstallShield 项目)。 我需要更改文件中的一些属性,因此我使用了 xml.etree.ElementTree(Python 库)。 我可以找到这些
我正在遍历 XML 树,但从树中提取节点而留下其内部节点时遇到了一些麻烦。 例如:
为了向现有元素添加新的子元素,我必须调用类方法,并将父元素作为参数。我希望子元素的创建是即将成为父元素的实例方法,并将子元素(来自 Element 构造函数)作为唯一的形式参数。 实际: #!/usr
我是一名优秀的程序员,十分优秀!