我在 xsl 上工作,将思维导图文件转换为 csv 树结构。我使用 python lxml
还有一个小问题 - 如何省略模板中必需的根标签?离开它们会导致:
AssertionError: ElementTree not initialized, missing root
源xml
<map version="0.9.0">
<node TEXT="Familie">
<node TEXT="Kinder">
<node TEXT="Sohn">
</node>
<node TEXT="Tochter">
<node TEXT="Hobbies">
<node TEXT="Fußball">
</node>
</node>
</node>
</node>
</node>
</map>
输出。注意p标签。如何丢弃它们?
<p>,"Familie"
"Familie","Kinder"
"Familie","Kinder","Sohn"
"Familie","Kinder","Tochter"
"Familie","Kinder","Tochter","Hobbies"
"Familie","Kinder","Tochter","Hobbies","Fußball"
</p>
我的床单
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" indent="no" encoding="ISO-8859-1" omit-xml-declaration="yes" media-type="string"/>
<xsl:strip-space elements="*" />
<xsl:template match="/">
<p>
<xsl:apply-templates/>
</p>
</xsl:template>
<xsl:template match="node">
<xsl:param name="par"/>
<xsl:variable name="nodetext" select="@TEXT"/>
<xsl:variable name="depth" select="count(ancestor::*)"/>
<xsl:value-of select="$par"/>,"<xsl:value-of select="$nodetext"/>"
<xsl:choose>
<xsl:when test="$depth<2">
<xsl:apply-templates>
<xsl:with-param name="par" select="concat('"',$nodetext,'"')"/>
</xsl:apply-templates>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates>
<xsl:with-param name="par" select="concat($par,',"',$nodetext,'"')"/>
</xsl:apply-templates>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>