2
我想使用XSLT製作一個簡單的XML - > CSV腳本。我發現etree似乎「想要」一個標籤輸出...有誰知道一種解決方法?是的,我見過這個帖子:XML to CSV Using XSLT。Python etree XSLT需要標記輸出嗎?
見下文......
下面是一個示例XML數據僅供參考。我的代碼甚至沒有對數據做任何事情,因爲它甚至沒有寫出頭文件。
<projects>
<project>
<name>Shockwave</name>
<language>Ruby</language>
<owner>Brian May</owner>
<state>New</state>
<startDate>31/10/2008 0:00:00</startDate>
</project>
<project>
<name>Other</name>
<language>Erlang</language>
<owner>Takashi Miike</owner>
<state> Canceled </state>
<startDate>07/11/2008 0:00:00</startDate>
</project>
</projects>
這裏是我的腳本:
import sys
from lxml import etree
system_file = sys.argv[1]
xml_file = sys.argv[2]
sys_txt = open(system_file,"r").read()
xsl_txt = open("csv_file.xslt","r").read()
sysroot = etree.fromstring(sys_txt)
xslroot = etree.fromstring(xsl_txt)
transform = etree.XSLT(xslroot)
with open(xml_file, "w") as f:
f.write(etree.tostring(transform(sysroot)))
這XSLT代碼不起作用(etree.tostring ... =無):
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
Hi
</xsl:template>
</xsl:stylesheet>
但這XSLT不工作...似乎etree需要輸出一個XML文件?
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
<dummy>
Hi
</dummy>
</xsl:template>
</xsl:stylesheet>
在這一點上我想我可以用假標籤進行,然後在年底將其刪除...
謝謝。這樣可行。我很好奇,爲什麼然後etree需要一個tostring方法?只是爲了漂亮打印? – user3700949
它通常用於打印XML元素/樹,而不是可以是XML,文本,HTML等的XSLT轉換結果。 – har07