私のXMLファイルから、各子ノードを別のファイルに書きたいと思っています。私はxml.etree.ElementTree.tostring(child_node)
を使っています。私はすでにすべてのタグに "ns0:"を追加するのを避けるために.register_namespace()
を使うべきであることを発見しました。しかし、私はまだ「のxmlnsは=」属性は、私が保存していますすべてのノードに追加しました:"xmlns ="を追加せずにXMLノード全体の内容を書き込む
ここでサンプルXMLファイルです:ここで
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.1">
<Document>
<name>ref.kml</name>
<Style id="normalState">
<IconStyle><scale>1.0</scale><Icon><href>yt.png</href></Icon></IconStyle>
<BalloonStyle><text><![CDATA[$[description]]]></text></BalloonStyle>
</Style>
</Document>
</kml>
は私のコードです:
#!/usr/bin/env python
import xml.etree.ElementTree as ET
str_ns_url = 'http://earth.google.com/kml/2.1'
ET.register_namespace('', str_ns_url)
kml_file = ET.parse('my.kml')
kml_doc = kml_file.getroot()[0]
ndx = 0
for child in kml_doc:
ndx+=1
f = open('node'+str(ndx)+'.txt','w')
f.write(ET.tostring(child))
f.close()
そして、これはあります最初のノード(<name>
)のための出力:
<name xmlns="http://earth.google.com/kml/2.1">ref.kml</name>
見ての通り、xmlns=
はADDEましたdをタグに追加します。今のところ私はthis SO postしか見つけませんでしたが、基本的には.tostring()
の後にその部分文字列を手動で削除することを提案しています。もっと良い解決策はありますか?多分ElementTree.tostring()
の代わりに何か他のものを使うべきでしょうか?あなたが考慮する必要がありますどのような