2009-12-15 41 views
8

由於歷史的原因,我們有XSL文件包含 - 層次內的xml,html或xhtml在<xsl:output>:哪個更好?

<xsl:output method="xml"> 

<xsl:output method="html"> 

<xsl:output method="xhtml"> 

的混合物。現在我們要重構所有XSL文件使用相同的輸出方法。

在我們要產生XHTML輸出結束,所以我想後者將是最好的選擇。

但什麼是這三種輸出方式,你會用什麼樣的解決方案之間的差異?

編輯:我使用XSLT 2.0

回答

4

我通過閱讀XSLT 2.0規範(XSLT 2.0 and XQuery 1.0 Serialization)找到了答案。

給定一個XHTML 元件,其內容模型不是 EMPTY的一個空的實例(例如,一個空的標題或 段落)串行絕不能使用 最小化形式。也就是說,它必須 輸出<p></p>而不是<p />

給定一個XHTML元素,其含量 模型是空的,串行化器必須 使用最小化標籤的語法,爲 例如<br />,如由XML 允許的替代 語法<br></br>在許多 現有用戶代理給出不確定的結果。串行器 必須在尾隨之前包括一個空格,例如, <br /><hr /><img src="karen.jpg" alt="Karen" />

的串行絕不能使用實體 參考&apos;其中,雖然 合法的XML,因此在XHTML, 沒有在HTML中定義,而不是 所有HTML用戶代理的認可。

串行器應該輸出的命名空間 聲明的方式,是 與 的XHTML DTD這是可能的要求相一致。 XHTML 1.0 DTD需要聲明 xmlns =「http://www.w3.org/1999/xhtml」 纔會出現在html元素上,而 僅在html元素上出現。該 串行器必須輸出的命名空間 聲明是與 存在於 結果樹的命名空間節點一致,但必須避免 上的元素在DTD 會使他們無效輸出冗餘命名空間 聲明。

這意味着,答案是使用<xsl:output method="xhtml">

+0

如果您使用的是XSLT 2.0。 – 2009-12-16 17:01:48

3

據我所知,沒有method:xhtml在XSLT 1.0 xsl:output指令。

wc3schools同意這一點。

由於XHTML是一種XML方言,這就是我會用什麼。

但如果你正在使用xslt 2.0,還不如用xhtml,因爲這是你在什麼輸出。

+0

在XSL 2.0中有。 – 2009-12-15 09:50:57

+0

就這樣。固定! – Oded 2009-12-15 09:52:54

8

HTML會序列作爲HTML,所以輸出可能不是良好的XML。如果你只是發送到瀏覽器,不關心能夠解析爲XML,那麼這可能適合你。

XML將序列化爲XML,因此輸出格式良好,但您可能會遇到瀏覽器使用輸出的一些問題。小的東西,像自我關閉<script /><div />元素。爲了避免這個問題,你必須玩遊戲,比如在元素中添加註釋(例如<script src="someJSFile.js"><!--don't close my script tag --></script>

如果你有一個XSLT 2.0引擎,並且希望格式良好的HTML輸出,而不必擔心某些元素被序列化,然後使用XHTML。