42

Python の Element Tree を介して XML ファイルを解析し、コンテンツを cpp ファイルに書き込んでいます。

子タグのコンテンツは、タグごとに異なります。たとえば、最初のイベント タグには子としてパーティ タグがありますが、2 番目のイベント タグにはありません。

-->解析前にタグが存在するかどうかを確認するにはどうすればよいですか?

-->子は、1 番目のイベント タグに value 属性がありますが、2 番目のイベント タグにはありません。値を取得する前に、属性が存在するかどうかを確認するにはどうすればよいですか。

--> 現在、私のコードは存在しないパーティ タグに対してエラーをスローし、2 番目の子タグに "None" 属性値を設定します。

<main>
  <event>
    <party>Big</party>
    <children type="me" value="3"/>
  </event>

  <event>
    <children type="me"/>
  </event>

</main>

コード:

import xml.etree.ElementTree as ET
tree = ET.parse('party.xml')
root = tree.getroot()
for event in root.findall('event'):
    parties = event.find('party').text
    children = event.get('value')

タグを確認してから、その値を取得したいと思います。

4

1 に答える 1

77

タグが存在しない場合は、.find()実際にを返しますNone。その値をテストするだけです。

for event in root.findall('event'):
    party = event.find('party')
    if party is None:
        continue
    parties = party.text
    children = event.get('value')

すでにoneventを使用して、属性.get()をテストしています。属性が存在しない場合もvalue返されます。None

属性は.attribディクショナリに保存されるため、標準のPython手法を使用して、属性を明示的にテストすることもできます。

if 'value' in event.attrib:
    # value attribute is present.
于 2013-03-22T10:33:17.127 に答える