提问人:Milano 提问时间:5/24/2021 更新时间:5/25/2021 访问量:189
如何结合 None 和 “g” 命名空间?
How to combine None and "g" namespace?
问:
我正在解析具有“g”和空命名空间的Google产品XML文件。
<feed ...
<entry>
<g:id>2</g:id>
<title>Some product
尝试在获取时使用属性:namespaces
xpath
tree.xpath('/feed/entry/g:title',namespaces:{'': 'http://www.w3.org/2005/Atom', 'g': 'http://base.google.com/ns/1.0'})
返回
empty namespace prefix is not supported in XPath
如何使用空命名空间?
答:
0赞
Forensic_07
5/25/2021
#1
要记住的重要一点是,命名空间前缀只是一个任意前缀。它不需要是空的,你可以把它做成任何你想要的东西。
从上下文来看,我假设这就是您的XML的样子?
如果是这样,则没有前缀的元素不在空命名空间中。它们位于命名空间中,只需在函数调用中为其分配任意前缀即可。http://www.w3.org/2005/Atom
In [1]: from lxml import etree
In [2]: string = '''
...: <feed xmlns="http://www.w3.org/2005/Atom" xmlns:g="http://base.google.com/ns/1.0">
...: <entry>
...: <g:id>2</g:id>
...: <title>Some product</title>
...: </entry>
...: </feed>
...: '''
In [3]: root = etree.fromstring(string)
In [4]: root.xpath('/foo:feed/foo:entry/foo:title',namespaces={'foo': 'http://www.w3.org/2005/Atom', 'bar': 'http:/
...: /base.google.com/ns/1.0'})
Out[4]: [<Element {http://www.w3.org/2005/Atom}title at 0x10a3d7d40>]
In [5]: root.xpath('/foo:feed/foo:entry/bar:id',namespaces={'foo': 'http://www.w3.org/2005/Atom', 'bar': 'http://b
...: ase.google.com/ns/1.0'})
Out[5]: [<Element {http://base.google.com/ns/1.0}id at 0x10a9ed4c0>]
评论
<feed ...>