【问题标题】:Node name from an xml file using lxml使用 lxml 的 xml 文件中的节点名称
【发布时间】:2013-10-15 11:56:48
【问题描述】:

我有一个结构如下的 xml 文件:

<?xml version="1.0" encoding="ISO-8859-1"?>

<root>

<Validity>
  <OneValidity a=1>----</OneValidity>
  <OneValidity a=2>----</OneValidity>
</Validity>

<ValidityLine>
  <OneValidityLinea a=1>----</OneValidityLine>
  <OneValidityLinea a=2>----</OneValidityLine>      
</ValidityLine>

</root>

我想使用 python 和 lxml 库返回父节点名称:ValidityValidityLine

【问题讨论】:

  • 问题是什么?
  • 如果任何节点名称以数字开头,似乎总是在抱怨,例如1a2
  • 这不是一个有效的 XML 文档。名称不能以数字开头。
  • 只是编辑我的问题,抱歉不清楚。我希望现在更好

标签: python xpath lxml elementtree


【解决方案1】:
from lxml import etree

tree = etree.parse("file.xml")
root = tree.getroot()
validityLst = root.xpath('Validity')
validityLineLst = root.xpath('ValidityLine')

【讨论】:

  • 谢谢。我已经使用过这段代码并且它可以工作。但是我可以返回父节点名称,而不在代码中指定父节点名称('Validity' 和'ValidityLine')。是否有可能对 xml 文件的结构及其层次结构起作用?
  • @user2418290:当然。您可以使用root.getchildren() 检索root 元素的子代:ValidityValidityLinea
  • 完美使用:tree = etree.parse(filename) root = tree.getroot() children = root.getchildren() print children[0].tag print children[1].tag
【解决方案2】:

多年后找到了这个答案,并想为我认为 OP 提出的问题提供更简洁的答案(以及将我从 Google 带到这里的问题):

from lxml import etree

# Parse file and get root node
tree = etree.parse("file.xml")
root = tree.getroot()

# Access root node name
name = root.tag

注意:tag 属性提供当前节点的名称。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-07
    • 1970-01-01
    • 1970-01-01
    • 2015-01-11
    • 2022-06-17
    • 1970-01-01
    相关资源
    最近更新 更多