【Python】iter()によるxmlタグの複数検索方法まとめ

xmlタグを検索するのに便利なiter()。しかし安易に複数検索しようとするとエラーになります。結論から書きます

成功例

(サンプル)test.xml

<?xml version="1.0" encoding="UTF-8" ?>
<TaggedPDF-doc>
  <Sect>
    <P>野球</P>
    <P>サッカー</P>
    <P>バレーボール</P>
  </Sect>
  <Sect>
    <L>韓国</L>
    <L>日本</L>
    <L>中国</L>
  </Sect>
</TaggedPDF-doc>

上の”P”タグと”L”タグを抽出することが目的のコードを作成します。

成功したコード

import xml.etree.ElementTree as ET
html_parser='lxml'

#xmlデータの読み込み関数の設定
def xml_read():
    tree = ET.parse('test.xml')
    root = tree.getroot()
    extraction = ""
    for child in root.iter("P" or "L"):
        if child.tag in ("P","L"):
            print(child.text)

#関数の動作
try:
    xml_read()
except KeyboardInterrupt:
    pass

出力結果

野球
サッカー
バレーボール
韓国
日本
中国

失敗例

失敗したコード1(”P”タグのみ抽出)

import xml.etree.ElementTree as ET
html_parser='lxml'

#xmlデータの読み込み関数の設定
def xml_read():
    tree = ET.parse('test.xml')
    root = tree.getroot()
    for child in root.iter("P" or "L"):
        print(child.text)

#関数の動作
try:
    xml_read()
except KeyboardInterrupt:
    pass

出力結果1

野球
サッカー
バレーボール

iter()内の”P”タグのみが選ばれて”L”タグは選ばれてません。もし”P”タグと”L”タグを入れ替えると出力結果は”L”タグのみが選ばれて表示されます。

失敗したコード2(”L”タグのみ抽出 )

import xml.etree.ElementTree as ET
html_parser='lxml'

#xmlデータの読み込み関数の設定
def xml_read():
    tree = ET.parse('test.xml')
    root = tree.getroot()
    for child in root.iter("L" or "P"):
        print(child.text)

#関数の動作
try:
    xml_read()
except KeyboardInterrupt:
    pass

出力結果2

韓国
日本
中国

コメント

タイトルとURLをコピーしました