ここで私はxmlを解析して値を取得する必要があります。私は 'personid = 01'のような属性要素を取得する必要がありますが、私はこのコードを取得できませんでした。また、私もグランド子供のノード値をフェッチする必要があります。ここでは、 "SIBLING"とその名前タグのためです。私はハードなコードを兄弟として使用せず、値を取得します。さらに、私は、複数の属性を処理し、それらを結びつけて最終的なテーブルの列として来るユニークなキーを形成する必要があります。Pythonのxmlからcsvへの変換
import xml.dom
import xml.dom.minidom
doc = xml.dom.minidom.parseString('''
<root>
<person id="01">
<name> abc</name>
<age>32</age>
<address>addr123</address>
<siblings>
<name></name>
</siblings>
</person>
<person id="02">
<name> def</name>
<age>22</age>
<address>addr456</address>
<siblings>
<name></name>
<name></name>
</siblings>
</person>
</root>
''')
innerlist=[]
outerlist=[]
def innerHtml(root):
text = ''
nodes = [ root ]
while not nodes==[]:
node = nodes.pop()
if node.nodeType==xml.dom.Node.TEXT_NODE:
text += node.wholeText
else:
nodes.extend(node.childNodes)
return text
for statusNode in doc.getElementsByTagName('person'):
for childNode in statusNode.childNodes:
if childNode.nodeType==xml.dom.Node.ELEMENT_NODE:
if innerHtml(childNode).strip() != '':
innerlist.append(childNode.nodeName+" "+innerHtml(childNode).strip())
outerlist.append(innerlist)
innerlist=[]
#print(outerlist)
attrlist = []
nodes = doc.getElementsByTagName('person')
for node in nodes:
if 'id' in node.attributes:
#print(node.attributes['id'].value)
attrlist.append(node.attributes['id'].value)
#print(attrlist)
dictionary = dict(zip(attrlist, outerlist))
print(dictionary)
私は以下のような出力を得ました。そして私は上記のコードにいくつか変更を加えました。 personidはその値を識別するためのユニークなキーとして使用されます。私はdictnoraryにそれを保存しました。 {'01':[名前abc '、'年齢32 '、'アドレスaddr123 ']、' 02 ':[名前def'、 '年齢22'、 '住所addr456']}ここで私は別のinnerlistとしてもsibilingタグを取得する必要があります。上記のコードで – nishanth
私は "兄弟"の名前属性に値を与えるのをスキップしました。 "兄弟名"タグが空の場合、私のコードはそれを付加しません。しかし、兄弟タグに値がある場合は、内部リストとして追加する必要があります。ユニークなキー "personid"の下。私は空のスペースを避けるために.strip()を使用しました.Constrainは値がそこに表示されるべきである場合です。値が存在しない場合は表示されません。私にとっては値がないのでdisplayiongはありません。値がある場合は値が表示されます。 – nishanth
Plsは完全なコードを変更せずに自分のコードitslfを修正しようとします。可能なら。ありがとう。 – nishanth