Python 内の辞書に問題があります。現在、「Namit Kewat」のおかげで、着信 xml から必要な情報を取得しています。そして、出力を印刷すると、見つかったすべてのものがリストされ、それぞれが独自の辞書に記載されています。これは良いことです。
ただし、「出力」ディクショナリを for ループして、すべての「アクティブ」キーとそれらに含まれる値を見つけようとすると、. 1 つの値のみを返します。これは、スキーマ内で見つかった最後の「アクティブ」の値です。
したがって、私の問題は、これらすべての辞書に対して、どのように反復または for ループなどを行うことができるかということです。ディクショナリを「出力」と呼びたいのですが、着信 xml には多くの「AssetEquipment」セクションがあります。辞書がうまくいかない場合は、より良い解決策を教えてください。基本的に私の目標は、多くの「AssetEquipment」を反復して値を取得し、それを拡張して「AssetSupport」などの xml ファイル内の他のものをカバーすることです。そのため、必要な複数のバージョン/インスタンスを持つグループが多数あります。
ありがとうございました。
import xml.etree.cElementTree as ET
tree = ET.parse('test.xml')
for elem in tree.getiterator():
if elem.tag=='{http://www.namespace.co.uk}AssetEquipment':
output={}
for elem1 in list(elem):
if elem1.tag=='{http://www.namespace.co.uk}Active':
output['Active']=elem1.text
if elem1.tag=='{http://www.namespace.co.uk}Direction':
output['Direction']=elem1.text
if elem1.tag=='{http://www.namespace.co.uk}Location':
for elem2 in list(elem1):
if elem2.tag=='{http://www.namespace.co.uk}RoomLocation':
for elem3 in list(elem2):
if elem3.tag=='{http://www.namespace.co.uk}Room':
output['Room']=elem3.text
print output
サンプル入力 (すべてを投稿するには大きすぎるため、小さくしてください):
<AssetEquipment>
<Name>PC123</Name>
<Active>Yes</Active>
<Direction>Positive</Direction>
<Location>
<RoomLocation>
<Room>18</Room>
</RoomLocation>
</Location>
</AssetEquipment>
<AssetEquipment>
<Name>PC256</Name>
<Active>No</Active>
<Direction>Positive</Direction>
<Location>
<RoomLocation>
<Room>19</Room>
</RoomLocation>
</Location>
</AssetEquipment>
印刷によるサンプル出力:
{'Direction': 'Positive', 'Active': 'Yes', 'Room': '18'}
{'Direction': 'Positive', 'Active': 'No', 'Room': '19'}
for ループ経由:
def isactive():
for key in output:
print output.get("Active")
No
No
望ましい出力:
Yes
No