2017-03-24 18 views
1

私は以下のコードのようなXMLファイルを扱っていますが、実際のものは多くあります。spreekbeurtセッションですが、私はそれを読みやすくしました。私の目標はspreekbeurtセッションのすべてから取得することです。voorvoegselachternaam部分のテキスト。私は私のXMLファイル内のすべてのspreekbeurt elemetsをループforループを使用しPython - ループのための深いXMLファイル

<?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> 

。しかし、voorvoegselsachternaam私のXMLファイルのすべてのspreekbeurtについて、どのように印刷しますか?

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の外に印刷された子どもたちを得るのですか?

ありがとうございます!

答えて

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表現。

関連する問題