2011-04-21 45 views
2

什麼是最簡單的XSLT(1.0)樣式表,可用於輸出自身?最簡單的XSLT樣式表,其輸出是XSLT樣式表...用於學習目的

我已經開始了它(並沒有很遠......)。 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="/"> 
... 

和輸出應該是,也同樣....

EDIT(閱讀從海報基內斯後... )

讓我提出這個要求很難......

是否XSLT樣式表存在,就會只是單純地輸出任何輸入文件。 (我的意思是輸出,不只是內部表示它):'任何輸入文檔'當然會包括自己...

+0

_「是否XSLT樣式表存在,就會只是單純地輸出任何輸入文件」 _是的,它的作用。許多人。但請注意,XSLT通過XML樹(Infoset/XDM)進行操作,該樹是文檔的**邏輯表示**,而不是確切的源文檔。在XSLT 2.0中,可以通過['fn:unparsed-text()'](http://www.w3.org/2005/xpath-functions/#unparsed-text) – 2011-04-22 01:48:01

+0

來解決。查看我的答案,獲取一個非常簡短的XSLT 1.0解決方案:) – 2011-04-22 02:30:17

+0

還添加了XSLT 2.0解決方案。 – 2011-04-22 02:36:33

回答

2

這種程序被稱爲「奎因」,併產生一個快速的谷歌「XSLT奎因」在此鏈接:http://www2.informatik.hu-berlin.de/~obecker/XSLT/#quine

+0

不錯的一個。感謝新的術語......實際上,儘管這兩個例子(self.xslt和quine.xslt)都很有趣(特別是第二個例子):它們在一定程度上「欺騙」似乎:第一個作者也被稱爲'作弊'),似乎沒有輸出任何東西(但大概是建立輸入文檔的內部代表),第二個包含它自己的副本「... monojohnny 2011-04-21 18:31:56

+0

實際上是第二個例子(現在我已經讀了'奎因'的定義 - 順便說一句 - 謝謝你向我介紹這個!)的確是一個真正的奎因:它沒有輸入文件。我*認爲*我的意思是這裏實際上是一個XSLT,它可以採取任何輸入 - 包括它本身:並重現它... – monojohnny 2011-04-21 18:37:19

+0

那就是身份變換。 – 2011-04-22 16:43:37

1

我沒有點擊鏈接奧利弗貝克爾上,而是先想到的是這樣的

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> 
+0

再次感謝:實際上,第一個例子與Oliver Becker的頁面上給出的例子相同:firefox將其作爲空白輸出呈現,這讓我猜想到了這一點。我會對此表示讚賞,並且接受Steven Huwig的回答,因爲他首先指出了這一點。再次感謝您的例子! – monojohnny 2011-04-22 08:41:29

+0

@monojohnny:不客氣。請注意,我的XSLT 2.0解決方案在Becker的頁面中並沒有平行。 – 2011-04-22 12:25:37