最简单的XSLT样式表,其输出为XSLT样式表…用于学习目的

最简单的XSLT样式表,其输出为XSLT样式表…用于学习目的,xslt,self,Xslt,Self,可以用于输出自身的最简单XSLT(1.0)样式表是什么 我已经开始了(还没走多远…)self.xml是样式表(和输入文档)的名称: ... 结果应该是一样的 编辑(在从海报上读到奎因之后…) 让我让这个要求更难 是否存在只输出任何输入文档的XSLT样式表。(我指的是输出,而不仅仅是内部表示):“任何输入文档”当然都包括它自己……这种程序被称为“quine”,快速搜索“XSLT quine”会得到这样一个链接:我没有点击Oliver Becker的链接,但首先想到的是这个链接: <?xm

可以用于输出自身的最简单XSLT(1.0)样式表是什么

我已经开始了(还没走多远…)
self.xml
是样式表(和输入文档)的名称:


...
结果应该是一样的

编辑(在从海报上读到奎因之后…)

让我让这个要求更难


是否存在只输出任何输入文档的XSLT样式表。(我指的是输出,而不仅仅是内部表示):“任何输入文档”当然都包括它自己……

这种程序被称为“quine”,快速搜索“XSLT quine”会得到这样一个链接:

我没有点击Oliver Becker的链接,但首先想到的是这个链接:

<?xml version="1.0" encoding="utf-8"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:template match="/">
  <xsl:copy-of select="document('')"/>
 </xsl:template>
</xsl:stylesheet>
<?xml version="1.0" encoding="utf-8"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:template match="/">
  <xsl:copy-of select="document('')" />
 </xsl:template>
</xsl:stylesheet>
XSLT 1.0

<?xml version="1.0" encoding="utf-8"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:template match="/">
  <xsl:copy-of select="document('')"/>
 </xsl:template>
</xsl:stylesheet>
<?xml version="1.0" encoding="utf-8"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:template match="/">
  <xsl:copy-of select="document('')" />
 </xsl:template>
</xsl:stylesheet>

应用于任何XML文档(未使用)时,结果与上面的代码完全相同

<?xml version="1.0" encoding="utf-8"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:template match="/">
  <xsl:copy-of select="document('')"/>
 </xsl:template>
</xsl:stylesheet>
<?xml version="1.0" encoding="utf-8"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:template match="/">
  <xsl:copy-of select="document('')" />
 </xsl:template>
</xsl:stylesheet>

XSLT2.0:

<?xml version="1.0" encoding="utf-8"?><xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text"/>
 <xsl:template match="/">
  <xsl:copy-of select="unparsed-text(static-base-uri())"/>
 </xsl:template>
</xsl:stylesheet>

如果您正在寻找身份转换,Wikipedia提供了一些示例


不错。同样感谢这个新术语……实际上,尽管这两个示例(self.xslt和quine.xslt)都很有趣(尤其是第二个示例):它们在某种程度上都是“作弊”的:第一个(作者也将其标记为“作弊”)似乎没有输出任何内容(但它可能会构建输入文档的内部代表),第二个包含它自己的副本“…实际上是第二个例子(现在我已经阅读了‘奎因’的定义——顺便说一句,很棒的东西——谢谢你向我介绍!),确实是一个真正的quine:它没有输入文档。我想我在这里指的实际上是一个XSLT,它可以接受任何输入,包括它本身:并复制它……那么,这只是身份转换。”是否存在一个XSLT样式表,它只会输出任何输入文档”“是的。他们中的许多人。但请注意,XSLT是在XML树(Infoset/XDM)上运行的,而XML树是文档的逻辑表示形式,比确切的源文档更少见。在XSLT2.0中,这个问题可以通过+1来解决。请参阅我的答案,了解一个非常简短的XSLT 1.0解决方案:)还添加了一个XSLT 2.0解决方案。再次感谢:实际上,第一个示例与Oliver Becker的页面上给出的相同:firefox将其呈现为一个空白输出,我想这让我很困惑。我将对此进行投票,并接受史蒂文·赫维格的回答,因为他首先指出了这一点。再次感谢您的示例@约翰尼:不客气。请注意,我的XSLT2.0解决方案在Becker的页面中没有相似之处。