2

OK、私が最初に認めますが、私が望む道ではなく、それを取得する方法がわかりません。

私はEclipseでPython 3.3を使用しており、職場のWindows 7と自宅のubuntu 13.04の両方でPydevプラグインを使用しています。私はPythonが初めてで、プログラミングの経験が限られています。

XML Lloyds 市場保険メッセージを取り込み、すべてのタグを見つけて .csv にダンプし、簡単に更新してから再インポートして、更新された xml を作成するスクリプトを作成しようとしています。

すべてのタグを取得する場合を除いて、すべてを行うことができました。タグ名のみが表示され、その上のタグは表示されません。

<TechAccount Sender="broker" Receiver="insurer">
<UUId>2EF40080-F618-4FF7-833C-A34EA6A57B73</UUId>
<BrokerReference>HOY123/456</BrokerReference>
<ServiceProviderReference>2012080921401A1</ServiceProviderReference>
<CreationDate>2012-08-10</CreationDate>
<AccountTransactionType>premium</AccountTransactionType>
<GroupReference>2012080921401A1</GroupReference>
<ItemsInGroupTotal>
<Count>1</Count>
</ItemsInGroupTotal>
<ServiceProviderGroupReference>8-2012-08-10</ServiceProviderGroupReference>
<ServiceProviderGroupItemsTotal>
<Count>13</Count>
</ServiceProviderGroupItemsTotal>

これは XML のフラグメントです。私が望むのは、すべてのタグとそのパスを見つけることです。たとえば、ItemsInGroupTotal/Count として表示したいのですが、Count としてしか取得できません。

これが私のコードです:

xml = etree.parse(fullpath)
print( xml.xpath('.//*'))
all_xpath = xml.xpath('.//*')
every_tag = []
for i in all_xpath:
    single_tag = '%s,%s' % (i.tag, i.text)
    every_tag.append(single_tag)
print(every_tag)

これは与える:

'{http://www.ACORD.org/standards/Jv-Ins-Reinsurance/1}ServiceProviderGroupReference,8-2012-08-10', '{http://www.ACORD.org/standards/Jv-Ins-Reinsurance/1}ServiceProviderGroupItemsTotal,\n', '{http://www.ACORD.org/standards/Jv-Ins-Reinsurance/1}Count,13',

ご覧のとおり、Count は {namespace}Count, 13 であり、{namespace}ItemsInGroupTotal/Count, 13 ではありません。

誰かが私に必要なものを教えてくれますか?

ありがとう(私の最初の投稿がOKであることを願っています)

アダム

編集:

これは私のコードです: open(fullpath, 'rb') as xmlFilepath: xmlfile = xmlFilepath.read()

fulltext = '%s' % xmlfile
text = fulltext[2:]
print(text)


xml = etree.fromstring(fulltext)
tree = etree.ElementTree(xml)

every_tag = ['%s, %s' % (tree.getpath(e), e.text) for e in xml.iter()]
print(every_tag)

しかし、これはエラーを返します: ValueError: エンコーディング宣言を持つ Unicode 文字列はサポートされていません。宣言なしでバイト入力または XML フラグメントを使用してください。

thy are b' として最初の 2 文字を削除すると、タグで始まらないと不平を言われました

アップデート:

私はこれをいじっていましたが、xis: xxx タグと上部の名前空間を削除すると、期待どおりに機能します。xis タグを保持し、それらを xis タグとして識別できるようにする必要があるため、単に削除することはできません。

これを達成する方法について何か助けはありますか?

4

2 に答える 2