我正在将XML转换为HTML文档.在本文档中,我想为刚刚转换的节点嵌入XML标记(HTML文档是技术规范).
例如,如果我的XML是这样的:
<transform-me> <node id="1"> <stuff type="floatsam"> <details>VarIoUs bits</details> </stuff> </node> </transform-me>
我希望我的XSLT输出看起来像这样:
<h1>Node 1</h1> <h2>Stuff (floatsam)</h2> VarIoUs bits <h2>The XML</h2> <stuff type="floatsam"> <details>VarIoUs bits</details> </stuff>
我希望有一个XSLT函数,我可以调用我的< stuff>我可以传递当前节点(.)的模板,并获取< stuff>的转义XML标记及其所有后代.我有一种感觉未解析的文本()可能是要走的路,但却无法让它发挥作用.
解决方法
非常简单的模板
<xsl:template match="node()" mode="print"> <xsl:choose> <!-- is it element? --> <xsl:when test="name()"> <!-- start tag --> <xsl:text><</xsl:text> <xsl:value-of select="name()" /> <!-- attributes --> <xsl:apply-templates select="@*" mode="print" /> <xsl:choose> <!-- has children --> <xsl:when test="node()"> <!-- closing bracket --> <xsl:text>></xsl:text> <!-- children --> <xsl:apply-templates mode="print" /> <!-- end tag --> <xsl:text></</xsl:text> <xsl:value-of select="name()" /> <xsl:text>></xsl:text> </xsl:when> <!-- is empty --> <xsl:otherwise> <!-- closing bracket --> <xsl:text>/></xsl:text> </xsl:otherwise> </xsl:choose> </xsl:when> <!-- text --> <xsl:otherwise> <xsl:copy /> </xsl:otherwise> </xsl:choose> </xsl:template> <xsl:template match="@*" mode="print"> <xsl:text> </xsl:text> <xsl:value-of select="name()" /> <xsl:text>="</xsl:text> <xsl:value-of select="." /> <xsl:text>"</xsl:text> </xsl:template>
用过的
<xsl:apply-templates mode="print" />
如果需要,您甚至可以添加漂亮的打印.