Python:在一个节点中解析具有多个属性的XML文件

伊泽

我仍然是编程新手,但我了解一些Python,并且对XPath和XML总体上很熟悉。目前,我正在处理一些看起来像这样的XML数据:

<foo>
  <bar>
      <unit>
          <structure>
              <token word="Rocky" att1="noun" att2="name">Rocky</token>
              <token word="the" att1="article" att2="">the</token>
              <token word="yellow" att1="adjective" att2="color">yellow</token>
              <token word="dog" att1="noun" att2="animal">dog</token>
          </structure>
      </unit>
  </bar>
</foo>

现在我需要做的是首先找到一个属性值,让我们

<token word="dog" att1="noun"att2="animal"</token>

对于一个实例。因此,在文档的所有结构中,我首先要查找所有具有动物作为att2的节点,然后将该节点的所有兄弟节点放入列表中。因为节点每个都有几个属性,所以我试图将它们每个都包含到一个不同的列表中,也就是说,从结构中的所有属性中创建一个列表,该结构中的动物具有其子代的att2值之一。例如:

 listWord = [Rocky, the, yellow, dog]
 listAtt1 = [noun, article, adjective, noun]
 listAtt2 = [name, ,color, animal]

目前,我只是想知道是否有可能。到目前为止,我只靠属性结构碰壁,更不用说空值了。

Asongtoruin

包括结束标记标记,并假设您的文本包含在中test.xml,以下内容:

import xml.etree.ElementTree

e = xml.etree.ElementTree.parse('test.xml').getroot()

listWord = []
listAtt1 = []
listAtt2 = []

for child in e.iter('token'):
    listWord.append(child.attrib['word'])
    listAtt1.append(child.attrib['att1'])
    listAtt2.append(child.attrib['att2'])

print listWord
print listAtt1
print listAtt2

将返回:

['Rocky', 'the', 'yellow', 'dog']
['noun', 'article', 'adjective', 'noun']
['name', '', 'color', 'animal']

e.iter()让您e作为根及其下的元素进行迭代-我们指定的标记token仅返回token元素。child.attrib返回属性字典,我们将其附加到列表中。

编辑:对于您的问题的第二点,我认为以下内容(虽然可能不是最佳实践)会满足您的需求:

import xml.etree.ElementTree

e = xml.etree.ElementTree.parse('test.xml').getroot()

listWord = []
listAtt1 = []
listAtt2 = []
animal_structs =[]

for structure in e.iter('structure'):
    for child in structure.iter('token'):
        if 'att2' in child.keys():
            if child.attrib['att2'] == 'animal':
                animal_structs.append(structure)
                break

for structure in animal_structs:
    for child in structure.iter('token'):
        listWord.append(child.attrib['word'])
        listAtt1.append(child.attrib['att1'])
        listAtt2.append(child.attrib['att2'])

print listWord
print listAtt1
print listAtt2

我们首先创建一个structure带有animal元素的所有元素的列表,然后返回每个结构的所有then属性。

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在python中解析XML:假设子节点具有特定属性,则选择一个属性

读取具有多个子节点的xml文件只会返回第一个节点

在另一个节点中具有相同名称的XML节点

通过XML动态生成的按钮始终具有与XML文件中最后一个节点相同的属性

是否有最佳实践来解析一个父XML节点中包含的所有信息?

比较两个xml树节点并使用xslt查找另一个节点中是否存在具有值的节点

SQL Server将XML解析为表-具有相同名称的多个节点,第一个节点应为表列

xslt:在上下文节点和具有相同@值的另一个节点中重新编号属性值

neo4j:用一个节点替换具有相同属性的多个节点

将所有xml节点的特定属性值导出到另一个文件

解析xml查找具有匹配属性的最后一个元素

尝试查询 XML 数据 - 节点中有一个空格

Kubernetes:当每个Pod公开一个端口时,一个节点中有多个Pod

您如何使用partykit 库中的partysplit 函数在一个子节点中进行具有多个因子级别的拆分

解析具有多个或1个标签的XML文件

如何在Python中将多个XML节点复制到另一个文件

Python仅重命名xml中许多节点中的第一个

一个具有多个动画列表的XML文件,而不是具有一个动画列表的许多XML文件(Android-Java)

在networkx节点中有一个冒号

如果一个类具有多个属性或一个属性作为具有多个键的字典,Python3

如何构造一个类以在同一XML节点中输出属性和简单字符串

从父节点中删除所有子节点,除了一个特定的,c# 中的 xml

在Java中读取一个标签中具有多个值的xml文件

在python中解析具有多个根元素的xml文件

在python中解析具有空属性的XML文件

将多个节点合并到一个节点中的节点红色

如何使用 XML::Simple 和 perl 解析具有 2 个属性的 xml 节点

从两个具有相同标签结构的xml文件的差异中创建一个节点

Xpath获取具有与另一个节点匹配的属性的所有节点