2009-11-11 75 views
2

我真的需要這個問題的答案。我正在研究一個使用XML創建頁面的項目,然後使用XSLT將其生成爲網頁。下面是一個代碼示例:PHP,通過XSLT將XML轉換爲HTML使HTML內部的CDATA編碼

public function transform ($xml) { 
    $proc = new XSLTProcessor; 
    $proc->importStyleSheet ($this->xsl); 
    $output = $proc->transformToXML ($xml); 
    return $output; 
} 

的$ XML包含XML格式的網頁,例如:

<?xml version="1.0" encoding="utf-8"?> 
<page> 
<meta> 
    <language>en</language> 
    <title>Main page</title> 

<content> 
<![CDATA[ 
    lot's of content here along with <p>html</p>. 
]]> 
</content> 

</page> 

因此,該網頁是XML,並通過轉換功能,其加載XSL文件以將XML轉換爲HTML網頁。但是,上述腳本將無法正確加載內容標籤,因爲XSLT出於某種原因不理解CDATA,並將HTML編碼爲實體。

所以,問題是,如何使用XSLT將HTML作爲HTML輸出而無需將其編碼爲實體?

回答

3

我敢肯定你不會有這樣的事情在你的XSLT:

<xsl:template match="content"> 
    <xsl:value-of select="." disable-output-escaping="yes" /> 
</xsl:template> 

XSLT 「理解」 CDATA非常清楚。更確切地說,它完全不涉及CDATA,這是底層XML DOM分析器的任務,它使文本值不在其中。

從一個角度XSLT點,沒有辦法知道是否該字符串的方式

"<div>bla &amp; bla</div>" 

出來的

<xml>&lt;div&gt;bla &amp;amp; bla&lt;/div&gt;</div> 

<xml><![CDATA[<div>bla &amp; bla</div>]]></div> 

CDATA僅僅是一個系列化方便。得到的信息集/ DOM是,與相同。除非你禁用了輸出轉義,XSLT正確地從上面的字符串產生以下值:

&lt;div&gt;bla &amp;amp; bla&lt;/div&gt; 

這是事實,你看到呈現的頁面上的HTML代碼的原因。

-1

看看this有幫助。我會在這裏回答更多的問題,但我認爲這個鏈接可以更好地解釋如何使用LexEv XMLReader實現XSLT的這種轉換結果,該XMLReader是XSLT和Saxon使用的標準XMLReader的包裝。