Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有办法让XSLT呼应为其提供动力的XML?_Xml_Design Patterns_Xslt_Serialization_Reflection - Fatal编程技术网

有没有办法让XSLT呼应为其提供动力的XML?

有没有办法让XSLT呼应为其提供动力的XML?,xml,design-patterns,xslt,serialization,reflection,Xml,Design Patterns,Xslt,Serialization,Reflection,我正在使用XSLT转换XML。XSLT有没有办法吐出提供给它的XML?比如: <xsl:echo-xml /> 以下内容将完整的XML复制到结果树中: <xsl:copy-of select="." /> 如果您想将其发送到“消息输出”,您可以这样包装: <xsl:message> <xsl:copy-of select="."/> </xsl:message> 基本上,我使用一些XSLT来 转换XML,有没有一种

我正在使用XSLT转换XML。XSLT有没有办法吐出提供给它的XML?比如:

<xsl:echo-xml />

以下内容将完整的XML复制到结果树中:

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

如果您想将其发送到“消息输出”,您可以这样包装:

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

基本上,我使用一些XSLT来 转换XML,有没有一种方法 XSLT吐出 喂它?比如:

<xsl:echo-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设计模式之一。它使复制除执行特定处理(如重命名、删除、修改内容等)的特定节点外的所有节点等任务变得极其简单。

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

<?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解释了XSL列表中的模板和模板

将其输出到何处,用于什么目的?在调试器中运行XSL怎么样?好问题(+1)。请参阅我的答案,了解一些可能的解决方案,并进行了详细解释。