ルート名 'structure'を持つxmlファイルを作成する必要があり、それぞれに要素のツリー構造を含むさまざまなサブ要素 "packets"で構成する必要があります。 1つのパケットは次のようになります。値のセットを反復してPythonでXMLファイルを作成する
<L2>
<srcmac>value1</srcmac>
<dstmac>value2</dstmac>
</L2>
<L3>
<dscp>
<timetolive>value3</timetolive>
</dscp>
</L3>
<L4>
<protocol>value4</protocol>
</L4>
Thパケットは 'n回'繰り返す必要があります。結合していないメソッドの書き込みを()ElementTreeのインスタンスで呼び出さなければなりません(代わりにstrのインスタンスを得た)
これは私が書いたコードです:私が、
import xml.etree.cElementTree as et
import pcapy
import sys
from struct import*
def main():
count=1
root=et.Element("structure")
#creating xml layout
eachpacket=et.SubElement(root,"packet")
while count<n:
child1=et.SubElement(eachpacket,"L2")
subchild1=et.SubElement(child1,"smac")
subchild2=et.SubElement(child1,"dmac")
child2=et.SubElement(eachpacket,"L3")
sub1=et.SubElement(child2,"sip")
sub2=et.SubElement(child2,"dip")
sub3=et.SubElement(child2,"dscp")
s2=et.SubElement(sub3,"timetolive")
child3=et.SubElement(eachpacket,"L4")
schild1=et.SubElement(child3,"protocol")
try:
count=count+1
subchild1.text=str(value1)
subchild2.text=str(value2)
s2.text=str(value3)
schild1.text=str(protocol)
except:
break
else:
tree=et.ElementTree(root)
tree.write("FileNew.xml")
pass
if __name__== "__main__":
main()
それは言っていくつかのエラーを与えますXMLファイルを出力として取得しましたが、最後のエントリはすべての前のエントリを上書きするように見え、生成されたxmlファイルには最後の 'packet'の反復のみが格納されます。
完全なツリーを繰り返し作成し、write()エラーを修正するには、何を修正する必要がありますか?
x、value1、value2、value3、およびprotocolの値は何ですか?すべてのコードを表示します。 – swatchai
@swatchai実際には.pcap(パケット)ファイルを読み込み、ソースmac、宛先MACアドレスを取得し、packet.next()を使用してpcapファイルの次のパケットに移動します。私はそれに問題はないことを確認しました。しかし、私はetreeの概念だけでなく、Pythonにも新しいので、私は正しい出力を得るために何をする必要があるのか理解できません。今のところ、 "パケット"のすべての反復にvalue1、value2などの値を印刷してみることができます.....私の問題を解決する方法を提案できますか? –