【问题标题】:Python - Deep XML file for loopPython - 用于循环的深层 XML 文件
【发布时间】:2017-03-24 00:18:58
【问题描述】:

我正在处理一个类似于下面代码的 XML 文件,真正的文件有更多的 spreekbeurt 会话,但我使它具有可读性。我的目标是从所有 spreekbeurt 会话中获取 voorvoegselachternaam 部分中的文本。

<?xml version="1.0" encoding="utf-8"?>
<officiele-publicatie xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://technische-documentatie.oep.overheid.nl/schema/op-xsd-2012-2">
  <metadata>
    <meta name="OVERHEIDop.externMetadataRecord" scheme="" content="https://zoek.officielebekendmakingen.nl/h-tk-20122013-4-2/metadata.xml" />
  </metadata>

  <handelingen>

      <spreekbeurt nieuw="ja">
        <spreker>
          <voorvoegsels>De heer</voorvoegsels>
          <naam>
            <achternaam>Marcouch</achternaam>
          </naam> (<politiek>PvdA</politiek>):</spreker>
        <tekst status="goed">
          <al>Sample Text</al>
        </tekst>
      </spreekbeurt> 

    </agendapunt>
  </handelingen>
</officiele-publicatie>

我使用 for 循环遍历我的 XML 文件中的所有 spreekbeurt 元素。但是如何为我的 XML 文件中的每个 spreekbeurt 打印出 voorvoegselsachternaam

import xml.etree.ElementTree as ET
tree = ET.parse('...\directory')
root = tree.getroot()

for spreekbeurt in root.iter('spreekbeurt'):
    print spreekbeurt.attrib

此代码打印:

{'nieuw': 'nee'}
{'nieuw': 'ja'}
{'nieuw': 'nee'}
{'nieuw': 'nee'}

但是如何让孩子们从 spreekbeurt 中打印出来呢?

提前致谢!

【问题讨论】:

    标签: python xml elementtree


    【解决方案1】:

    您可以使用find() 将路径* 传递给目标元素以查找父/祖先中的单个元素,例如:

    >>> for spreekbeurt in root.iter('spreekbeurt'):
    ...     v = spreekbeurt.find('spreker/voorvoegsels')
    ...     a = spreekbeurt.find('spreker/naam/achternaam')
    ...     print v.text, a.text
    ...
    De heer Marcouch
    

    *) 实际上它不仅支持简单的路径,还支持subset of XPath 1.0 表达式。

    【讨论】:

      猜你喜欢
      • 2021-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多