【问题标题】:Simplest XSLT Stylesheet whose output is the XSLT Stylesheet...For learning purposes最简单的 XSLT 样式表,其输出是 XSLT 样式表...用于学习目的
【发布时间】:2011-04-21 17:52:53
【问题描述】:

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

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

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="self.xml"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
...

输出应该是一样的......

编辑(在阅读海报中的 quines 之后......)

让我把这个要求变得更难......

是否存在一个 XSLT 样式表,它只会简单地输出任何输入文档。 (我的意思是输出,而不仅仅是在内部表示它):“任何输入文档”当然会包括它自己...

【问题讨论】:

  • “是否存在一个 XSLT 样式表,它只会简单地输出任何输入文档” 是的,它确实存在。许多人。但请注意,XSLT 在 XML 树 (Infoset/XDM) 上运行,该树是文档的逻辑表示,比确切的源文档更稀有。在 XSLT 2.0 中将由 fn:unparsed-text() 解决
  • 好问题,+1。请参阅我的答案以获得非常简短的 XSLT 1.0 解决方案:)
  • 还添加了 XSLT 2.0 解决方案。

标签: xslt self


【解决方案1】:

这种程序被称为“quine”,快速谷歌搜索“XSLT quine”得到了这个链接:http://www2.informatik.hu-berlin.de/~obecker/XSLT/#quine

【讨论】:

  • 不错的一个。也感谢新术语……实际上,尽管这两个示例(self.xslt 和 quine.xslt)都很有趣(尤其是第二个):它们都在一定程度上“作弊”:第一个(其中作者还标记为“作弊”),似乎没有输出任何内容(但它可能会构建输入文档的内部代表),第二个包含它自己的副本“...
  • 实际上第二个例子(现在我已经阅读了“quine”的定义——顺便说一句很棒——谢谢你向我介绍这个!),确实是一个真正的quine:它没有输入文件。我认为我在这里的意思实际上是一个 XSLT,它可以接受任何输入 - 包括它自己:并重现它...
  • 那只是身份转换。
【解决方案2】:

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

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 文档(未使用)时,结果与上面的代码完全相同

<?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 2.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>

【讨论】:

  • 再次感谢:实际上第一个示例与 Oliver Becker 页面上给出的示例相同:firefox 将其呈现为空白输出,我猜这让我感到震惊。我会对此表示赞同,并接受 Steven Huwig 的回答,因为他首先指出了我。再次非常感谢您的示例!
  • @monojohnny:不客气。请注意,我的 XSLT 2.0 解决方案在 Becker 的页面中没有类似之处。
【解决方案3】:

如果您正在寻找身份转换,维基百科有一些示例。

http://en.wikipedia.org/wiki/Identity_transform

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多