0
從XML文檔中,我想將一個節點保存到文件 - 包含所有父節點,但沒有任何子節點。例如,對於下面的XML:保存(打印)xml節點及其父母但沒有子女
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.1">
<Document id="myid">
<name>ref.kml</name>
<Style id="normalState">
<IconStyle><scale>1.0</scale><Icon><href>yt.png</href></Icon></IconStyle>
</Style>
</Document>
</kml>
爲<Document>
節點預計產量將是這樣的:
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.1">
<Document id="myid">
</Document>
</kml>
到目前爲止,我只找到了迭代去除所有子元素的溶液中保存前。但由於我需要使用原始XML後,我必須複製整個文檔:
#!/usr/bin/env python
import lxml.etree as ET # have to use [lxml] because [xml] doesn't support 'xml_declaration'
import copy
kml_file = ET.parse("myfile.kml")
kml_copied = copy.deepcopy(kml_file) # .copy() is not enough, need .deepcopy()
root = kml_copied.getroot()
my_node = root[0]
for child in my_node:
my_node.remove(child)
print ET.tostring(kml_copied, xml_declaration=True, encoding='utf-8')
有沒有更好的方法來做到這一點?至少避免對整個文檔進行深度拷貝......
好吧,我認爲啓動XSLT機器這麼簡單的任務會有點矯枉過正:)但我會考慮它,謝謝你的回答! –
請注意,除了刪除節點之外,還可以在同一個XSLT腳本中處理其他XML修改。你可以在Python中嵌入XSLT而不是外部文件。此外,文件可移植到其他語言和可執行文件(Java,PHP,C#,VBA,Saxon,Xalan)。當然,一個可擴展的答案!如果有幫助,請接受以確認解決方案。 – Parfait