0
XMLファイルの構文解析に関する助けが必要です。私は数週間車を回転させてきており、それほど進歩はしていません。私は以下のXMLスニペットを持っており、名前と値を持つ列を作成しようとしています。問題は、いくつかの名前が索引付けされ、並べて印刷するときに位置合わせの問題が発生することです。Python XMLの解析 - インデックス付きの要素の整列
このXMLを解析して希望のプリントを得ることができますか?理想的には、システムにはこのモジュールがないのでlxmlを使わずにやりたいと思っていますが、lxmlを使っても構いません。
XMLファイルの例:
<root>
<elments>
<mgmtid>
<date>20160926</date>
<gp>3600</gp>
<name p="">watermelons</name>
<name p="">bananas</name>
<name p="">oranges</name>
<valuegroup>
<objid>None</objid>
<value p="">10</value>
<value p="">15</value>
<value p="">20</value>
</valuegroup>
</mgmtid>
<mgmtid>
<date>20160926</date>
<gp>3600</gp>
<name p="">apples</name>
<valuegroup>
<objid>red</objid>
<value p="">100</value>
</valuegroup>
<valuegroup>
<objid>blue</objid>
<value p="">200</value>
</valuegroup>
<valuegroup>
<objid>yellow</objid>
<value p="">300</value>
</valuegroup>
<valuegroup>
<objid>white</objid>
<value p="">400</value>
</valuegroup>
<valuegroup>
<objid>green</objid>
<value p="">500</value>
</valuegroup>
</mgmtid>
<mgmtid>
<date>20160926</date>
<gp>3600</gp>
<name p="">strawberry</name>
<name p="">guava</name>
<valuegroup>
<objid>None</objid>
<value p="">650</value>
<value p="">750</value>
</valuegroup>
</mgmtid>
</elments>
</root>
私の試みは、名前と値を得ることで(無残に失敗しました)。あなたが見ることができるように、値は名前と揃っていません。
import xml.etree.ElementTree as ET
import itertools
import collections
tree = ET.parse('test_xml_file.xml')
root = tree.getroot()
names = []
values = []
for i in (tree.findall('.//')):
if i.tag == 'name':
n = (i.tag, i.text)
names.append(n[0] + ' ' + str(n[1]))
for i in (tree.findall('.//')):
if i.tag == 'value' or i.tag == 'objid':
v = (i.tag, i.text)
values.append(v[0] + ' ' + str(v[1]))
print('=' * 45)
for n, v in itertools.zip_longest(names, values):
print(str(n).ljust(20, ' ') + str(v))
電流出力:
name watermelons objid None
name bananas value 10
name oranges value 15
name apples value 20
name strawberry objid red
name guava value 100
None objid blue
None value 200
None objid yellow
None value 300
None objid white
None value 400
None objid green
None value 500
None objid None
None value 650
None value 750
所望の出力:
=============================
name Index value
=============================
watermelons None 10
bananas None 15
oranges None 20
apples red 100
apples blue 200
apples yellow 300
apples white 400
apples green 500
strawberry None 650
guava None 750
ありがとうございます。これは私が探していたものを正確に達成しませんでしたが、インデックス以外の値の名前と値を調整するのに役立ちました。インデックス化された値の解決策を探し続けます。ありがとう。 – MBasith