如何使用python获取具有默认名称空间的xml文件中所有元素的xpath?

马里兹

我想获取xml文件中每个元素的xpath。

xml文件:

<root 
xmlns="http://www.w3.org/TR/html4/"
xmlns:h="http://www.w3schools.com/furniture">

<table>
  <tr>
    <h:td>Apples</h:td>
    <h:td>Bananas</h:td>
  </tr>
</table>
</root>

python代码:由于默认名称空间中不允许使用null前缀,因此我使用了自己的前缀。

from lxml import etree 
root=etree.parse(open("MyData.xml",'r'))
ns={'df': 'http://www.w3.org/TR/html4/', 'types': 'http://www.w3schools.com/furniture'}
for e in root.iter():
   b=root.getpath(e)
   print b
   r=root.xpath(b,namespaces=ns)
   #i need both b and r here

xpath像这样(输出b)

/*
/*/*[1]
/*/*[1]/*[1]
/*/*[1]/*[1]/h:td

我无法正确获取具有默认名称空间的元素的xpath,对于那些元素名称,它显示为*。如何正确获取xpath?

基思·霍尔

您可以使用getelementpath,它始终以Clark表示法返回元素,并手动替换名称空间:

x = """
<root 
xmlns="http://www.w3.org/TR/html4/"
xmlns:h="http://www.w3schools.com/furniture">

<table>
  <tr>
    <h:td>Apples</h:td>
    <h:td>Bananas</h:td>
  </tr>
</table>
</root>
"""

from lxml import etree 
root = etree.fromstring(x).getroottree()
ns = {'df': 'http://www.w3.org/TR/html4/', 'types': 'http://www.w3schools.com/furniture'}
for e in root.iter():
    path = root.getelementpath(e)
    root_path = '/' + root.getroot().tag
    if path == '.':
        path = root_path
    else:
        path = root_path + '/' + path
    for ns_key in ns:
        path = path.replace('{' + ns[ns_key] + '}', ns_key + ':')
    print(path)
    r = root.xpath(path, namespaces=ns)
    print(r)

显然,此示例显示了getelementpath返回相对于根节点的路径,例如.和,dt:table而不是/df:rootand /df:root/df:table,因此我们使用tag根元素的手动构建完整路径。

输出:

/df:root
[<Element {http://www.w3.org/TR/html4/}root at 0x37f5348>]
/df:root/df:table
[<Element {http://www.w3.org/TR/html4/}table at 0x44bdb88>]
/df:root/df:table/df:tr
[<Element {http://www.w3.org/TR/html4/}tr at 0x37fa7c8>]
/df:root/df:table/df:tr/types:td[1]
[<Element {http://www.w3schools.com/furniture}td at 0x44bdac8>]
/df:root/df:table/df:tr/types:td[2]
[<Element {http://www.w3schools.com/furniture}td at 0x44bdb88>]

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用python获取具有默认名称空间的xml文件中所有元素的xpath?

来自分类Dev

当xml具有与元素关联的名称空间时,如何使用xslt从xml正确获取数据

来自分类Dev

如何使用XPath根据条件获取XML containsg默认名称空间中的特定元素

来自分类Dev

如何使用JDOM以相同的名称编写和获取具有相同名称的所有xml元素

来自分类Dev

如何使用JDOM以相同的名称编写和获取具有相同名称的所有xml元素

来自分类Dev

具有显式默认名称空间的XML文档的XPath和名称空间规范

来自分类Dev

使用Javascript获取XML中所有节点的名称

来自分类Dev

使用Javascript获取XML中所有节点的名称

来自分类Dev

使用属性获取XML树中所有节点的xpath-Python

来自分类Dev

当XML上存在默认名称空间时,如何使用XSLT添加具有名称空间的属性

来自分类Dev

如何在Python中使用LXML捕获XML文件的所有元素名称?

来自分类Dev

如何在Python中使用LXML捕获XML文件的所有元素名称?

来自分类Dev

如何使用xmllint xpath获取具有相同标签名称的所有属性

来自分类Dev

无论使用C#在XML文件中的级别如何,都获取具有相同标签名称的所有标签

来自分类Dev

如何使用属性获取lxml中所有元素的路径

来自分类Dev

获取目录node-fs中所有具有信息(名称,类型,大小)的文件

来自分类Dev

获取目录node-fs中所有具有信息(名称,类型,大小)的文件

来自分类Dev

如何使用LINQ to XML连接具有相同名称值的所有子元素

来自分类Dev

使用Powershell在具有名称空间的XML中选择具有Xpath的属性

来自分类Dev

使用Powershell在具有名称空间的XML中选择具有Xpath的属性

来自分类Dev

如何获取集合中所有文件的所有文件?

来自分类Dev

如何从名称空间获取所有密钥?

来自分类Dev

具有名称空间的xpath查询根元素

来自分类Dev

如何使用JQuery解析具有名称空间的xml(并适用于所有浏览器..)?

来自分类Dev

如何使用JQuery解析具有名称空间的xml(并适用于所有浏览器..)?

来自分类Dev

使用XmlDocument从具有或不具有名称空间的xml文件读取

来自分类Dev

如何使用Robot Framework获取网页元素的所有xpath?

来自分类Dev

如何使用xpath查找特定类型的所有xml元素?

来自分类Dev

Python 3x:使用python xml.etree解析具有名称空间的xml文件

Related 相关文章

  1. 1

    如何使用python获取具有默认名称空间的xml文件中所有元素的xpath?

  2. 2

    当xml具有与元素关联的名称空间时,如何使用xslt从xml正确获取数据

  3. 3

    如何使用XPath根据条件获取XML containsg默认名称空间中的特定元素

  4. 4

    如何使用JDOM以相同的名称编写和获取具有相同名称的所有xml元素

  5. 5

    如何使用JDOM以相同的名称编写和获取具有相同名称的所有xml元素

  6. 6

    具有显式默认名称空间的XML文档的XPath和名称空间规范

  7. 7

    使用Javascript获取XML中所有节点的名称

  8. 8

    使用Javascript获取XML中所有节点的名称

  9. 9

    使用属性获取XML树中所有节点的xpath-Python

  10. 10

    当XML上存在默认名称空间时,如何使用XSLT添加具有名称空间的属性

  11. 11

    如何在Python中使用LXML捕获XML文件的所有元素名称?

  12. 12

    如何在Python中使用LXML捕获XML文件的所有元素名称?

  13. 13

    如何使用xmllint xpath获取具有相同标签名称的所有属性

  14. 14

    无论使用C#在XML文件中的级别如何,都获取具有相同标签名称的所有标签

  15. 15

    如何使用属性获取lxml中所有元素的路径

  16. 16

    获取目录node-fs中所有具有信息(名称,类型,大小)的文件

  17. 17

    获取目录node-fs中所有具有信息(名称,类型,大小)的文件

  18. 18

    如何使用LINQ to XML连接具有相同名称值的所有子元素

  19. 19

    使用Powershell在具有名称空间的XML中选择具有Xpath的属性

  20. 20

    使用Powershell在具有名称空间的XML中选择具有Xpath的属性

  21. 21

    如何获取集合中所有文件的所有文件?

  22. 22

    如何从名称空间获取所有密钥?

  23. 23

    具有名称空间的xpath查询根元素

  24. 24

    如何使用JQuery解析具有名称空间的xml(并适用于所有浏览器..)?

  25. 25

    如何使用JQuery解析具有名称空间的xml(并适用于所有浏览器..)?

  26. 26

    使用XmlDocument从具有或不具有名称空间的xml文件读取

  27. 27

    如何使用Robot Framework获取网页元素的所有xpath?

  28. 28

    如何使用xpath查找特定类型的所有xml元素?

  29. 29

    Python 3x:使用python xml.etree解析具有名称空间的xml文件

热门标签

归档