私は現在、解析しようとしているXMLファイルを持っています。ここまで私のコードです。複数の子供が名前を共有するときにPythonでXMLを解析する
from xml.etree import ElementTree
with open('data.xml', 'rt') as f:
tree = ElementTree.parse(f)
for node in tree.iter('Host'):
hostname = node.find('Name').text
ip = node.find('Networking/IP').text
print hostname
print ip
しかし、これらのデバイスの全てが3つのIPアドレスを持っているので、私は問題に実行していますので、まったく同じ名前を持つ複数のXML「子ども」があります。ここだから私のテストスクリプトは、最初のIPをサンプル(実際のホスト名が遮ら)
<?xml version="1.0" encoding="UTF-8"?>
<APIResponse>
<HostRecords>
<Type>Dedicated</Type>
<Host>
<Name>dc-01-a.domain.com</Name>
<Active>1</Active>
<Networking>
<Primary>Yes</Weight>
<IP>10.0.8.72</IP>
</Networking>
<Networking>
<Primary>No</Weight>
<IP>10.12.12.1</IP>
</Networking>
<Networking>
<Primary>Yes</Weight>
<IP>fd30:0000:0000:0001:ff4e:003e:0009:000e</IP>
</Networking>
</Host>
</Type>
</HostRecords>
</APIResponse>
を引き出しているが、どのように私は次の二つのIPアドレスを引くのですか? 'Networking/IP'は3つの点で全く同じものですが、1つだけ引っ張ります。また、プライマリとラベル付けされたIPしか取得できないようにするにはどうしたらいいですか?
編集:私は代わりに見つけるのにfindAllとしようとした場合、私は
AttributeError: 'list' object has no attribute 'text'
を取得し、私はテキスト部分を削除した場合、私は
[<Element 'RData' at 0x10ef67650>, <Element 'RData' at 0x10ef67750>, <Element 'RData' at 0x10ef67850>]
を取得するだからではなく、実際の読み取り可能なデータとして返します。
XML構造をチェックしてください。 3番目のNetworkingタグが間違っているようです。 – arcee123
おそらく 'node.find()'の代わりに 'node.findall()'を使うでしょうか? –
ああ、ありがとうございました。必要な関連データを会社のプライバシー目的のためにそこに残しながら、余分なデータの多くを妨害しようとしました。 – Mallachar