有没有办法让 XSLT 回显出为其提供支持的 XML?

Is there a way to XSLT to echo out the XML powering it?

提问人:Andrew G. Johnson 提问时间:6/22/2010 最后编辑:Paul SweatteAndrew G. Johnson 更新时间:7/10/2013 访问量:6497

问:

我正在使用 XSLT 来转换 XML。有没有办法让 XSLT 吐出提供它的 XML?像这样:

<xsl:echo-xml />
XML 设计模式 XSLT 序列化 反射

评论

1赞 John Saunders 6/22/2010
吐到哪里,出于什么目的?在调试器中运行 XSL 怎么样?
0赞 Dimitre Novatchev 6/22/2010
好问题(+1)。请参阅我的答案,了解一些可能的解决方案,并进行了详细解释。

答:

6赞 Lucero 6/22/2010 #1

以下命令将完整的 XML 复制到结果树中:

<xsl:copy-of select="." />

如果你想把它发送到“消息输出”,你可以这样包装它:

<xsl:message>
    <xsl:copy-of select="."/>
</xsl:message>
8赞 Dimitre Novatchev 6/22/2010 #2

基本上我正在使用一些 XSLT 来 转换 XML,有没有办法让 XSLT 吐出 XML 喂它?像这样:

最简单和最短的方法

<xsl:copy-of select="/"/>

这将输出当前的 XML 文档。

<xsl:copy-of select="."/>

这将输出由当前节点根植的子树。

但是,XSLT 程序员主要使用以下(标识规则):

 <xsl:template match="node()|@*">
  <xsl:copy>
    <xsl:apply-templates select="node()|@*"/>
  </xsl:copy>
 </xsl:template>

如果这是样式表中唯一的模板,则将输出应用转换的完整 XML 文档。

使用标识规则是最基本的 XSLT 设计模式之一。它使诸如复制所有节点但执行特定处理的特定节点(例如重命名、删除、修改内容等)等任务变得非常容易。

0赞 Paul Sweatte 1/6/2012 #3

使用带有 XPath 函数和尖括号实体的模板来输出节点名称:name()

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="serialize.xml"?>
<xsl:stylesheet version="1.0"
            xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml"
            >
<xsl:output method="xml" encoding="utf-8" version="" indent="yes" standalone="no" media-type="text/html" omit-xml-declaration="no" doctype-system="about:legacy-compat" />

<xsl:template match="xsl:stylesheet">
  <xsl:apply-templates/>
</xsl:template>

<xsl:template match="/">
  <html>
    <head>
      <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
    </head>
    <body>
      <xsl:apply-templates select="*" mode="serialize"/>
    </body>
  </html>
</xsl:template>

    <xsl:template match="*" mode="serialize">
      &lt;<xsl:value-of select="name()" />&gt;
    <xsl:apply-templates select="*" mode="serialize"/>
</xsl:template>
</xsl:stylesheet>

有关详细信息,Jeni Tennison 解释了用于将 XML 节点复制到 HTML 以及在 XSL 列表上序列化外部 XML 文档的模板