0

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
4

1 に答える 1

2

2 つの問題:

  1. 各 AssetEquipment の出力辞書を上書きしています。インラインの print ステートメントで動作しますが、後で結果をループすることはできません。各出力辞書をリストに保存する必要があります。

    results = []
    for elem in tree.getiterator():
        if elem.tag=='{http://www.namespace.co.uk}AssetEquipment':
            output={}
            results.append(output)
            ...
    
  2. 単一の出力辞書のキーではなく、結果リストをループする必要があります

    def isactive():
        for output in results:
            print output.get("Active")
    
于 2012-11-26T15:33:40.713 に答える