微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在XSLT的HTML输出中发出节点的转义XML表示

我正在将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>
   &lt;stuff type=&quot;floatsam&quot;&gt;
      &lt;details&gt;VarIoUs bits&lt;/details&gt;
   &lt;/stuff&gt;

我希望有一个XSLT函数,我可以调用我的< stuff>我可以传递当前节点(.)的模板,并获取< stuff>的转义XML标记及其所有后代.我有一种感觉未解析的文本()可能是要走的路,但却无法让它发挥作用.

解决方法

非常简单的模板
<xsl:template match="node()" mode="print">

        <xsl:choose>

            <!-- is it element? -->
            <xsl:when test="name()">

                <!-- start tag -->
                <xsl:text>&lt;</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>&gt;</xsl:text>

                        <!-- children -->
                        <xsl:apply-templates mode="print" />

                        <!-- end tag -->
                        <xsl:text>&lt;/</xsl:text>
                        <xsl:value-of select="name()" />
                        <xsl:text>&gt;</xsl:text>
                    </xsl:when>

                    <!-- is empty -->
                    <xsl:otherwise>
                        <!-- closing bracket -->
                        <xsl:text>/&gt;</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>=&quot;</xsl:text>
    <xsl:value-of select="." />
    <xsl:text>&quot;</xsl:text>
</xsl:template>

用过的

<xsl:apply-templates mode="print" />

如果需要,您甚至可以添加漂亮的打印.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐