XSLT 是输入驱动的。如果将为不同的输入生成不同的输出。
在任何比您的简单示例更复杂的实际场景中,在没有任何输入运行的情况下查看代码意味着您无法说出输出将是什么样子。
对于您的简单示例,您可以通过另一个 XSLT 样式表运行您的 XSLT 样式表。
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
<xsl:output method="text" />
<xsl:template match="*">
<xsl:value-of select="concat('<', name())" />
<xsl:apply-templates select="@*" />
<xsl:value-of select="'>'" />
<xsl:apply-templates select="*" />
<xsl:value-of select="concat('</', name(), '>')" />
</xsl:template>
<xsl:template match="@*">
<xsl:value-of select="concat(' ', name(), '="', ., '"')" />
</xsl:template>
<xsl:template match="xsl:*">
<xsl:apply-templates select="*" />
</xsl:template>
<xsl:template match="xsl:value-of">
<xsl:value-of select="concat('{{value-of: ', @select, '}}')" />
</xsl:template>
<!-- add appropriate templates for the other XSLT elements -->
</xsl:stylesheet>
使用您的示例,这会产生字符串
<head><title></title></head><body>{{value-of: root/element1}}</body>
However, the "add appropriate templates for the other XSLT elements" part is the difficult bit. Your output will be in the order of the input (XSLT is input-driven, as I said). Your XSLT program will most likely not be layed out the same way as the output it is going to produce, so generating sensible documentation from it might be quite a bit harder than you think.