2010-11-30 47 views
2
括號

我有一些示例XML:HTML被轉換與<和>

<sample><![CDATA[Line 1<br />Line 2<br />Line 3<br />]]></sample> 

我使用ASP以輸出使用樣式表像所以這個XML:

Set xmlHttp = Server.CreateObject("Microsoft.XMLHTTP") 
xmlHttp.open "GET", URLxml, false 
xmlHttp.send() 

Set xslHttp = Server.CreateObject("Microsoft.XMLHTTP") 
xslHttp.open "GET", xXsl, false 
xslHttp.send() 

Set xmlDoc = Server.CreateObject("MICROSOFT.XMLDOM") 
Set xslDoc = Server.CreateObject("MICROSOFT.XMLDOM") 
xmlDoc.async = false 
xslDoc.async = false 
xmlDoc.Load xmlHttp.responseXML 
xslDoc.Load xslHttp.responseXML 

Response.Write xmlDoc.transformNode(xslDoc) 

然而,一旦寫入,HTML輸出顯示爲:

Line 1&lt;br /&gt;Line 2&lt;br /&gt;Line 3 

我可以看到t帽子ASP正在轉換代碼中的括號,但我不知道爲什麼。有什麼想法嗎?

+0

好問題,+1。除了@Alejandro的解釋之外,請參閱我的回答,描述解決問題的最佳解決方案。 – 2010-11-30 14:28:50

+0

+1問題很明確,並尋求一個明確的答案 - 指出,張貼XSL文件將有所幫助。 – orangepips 2010-11-30 14:40:46

+0

輸出此數據的XSL部分是簡單的。 – 2010-11-30 16:17:26

回答

2

我有一些示例XML:

<sample><![CDATA[Line 1<br />Line 2<br />Line 3<br />]]></sample> 

這是一個sample元素與文本節點孩子。

假設您應用了標識轉換。那麼結果將是:

<sample>Line 1&lt;br /&gt;Line 2&lt;br /&gt;Line 3&lt;br /&gt;</sample> 

爲什麼?由於文本節點和屬性值具有特殊字符&,<>作爲字符實體轉義。

編輯:當然,你可以使用DOE ......但是,除此之外,它是一個可選功能,其結果將是一個文本節點不管什麼(不編碼字符實體)。您將需要其他解析器fase(這可能會在將HTML片段輸出並編碼到(X)HTML文檔(如提要中)時很有用,但輸出格式不正確...)。

該樣式表:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="sample"> 
     <p> 
      <xsl:value-of select="." disable-output-escaping="yes"/> 
     </p> 
    </xsl:template> 
</xsl:stylesheet> 

輸出:

<p>Line 1<br />Line 2<br />Line 3<br /></p> 

渲染爲(實際的標記):

行1
線路2
行3

1

除了@亞歷杭德羅的解釋,她e是最好的解決方案:

切勿將標記置於文本(CDATA)節點中。

相反的:

<sample><![CDATA[Line 1<br />Line 2<br />Line 3<br />]]></sample> 

始終創建:

<sample>Line 1<br />Line 2<br />Line 3<br /></sample> 

記住:把標記CDATA內正在失去它。

1

認爲這是導致您問題的XSL轉換。您應該能夠編輯您的.xsl文件來糾正這個如此:

<xsl:template match="."> 
    <xsl:value-of select="." disable-output-escaping="yes" /> 
    <!-- ... other XSL business here ... --> 
</xsl:template> 

我從this page about disable output escaping偷竊。

爲了記錄我討厭XML/XSL - 尋找問題的解決方案。一般來說,如果您需要處理標記,我發現XML/XSL僅引入問題,因爲經常需要處理標記片段(通常不是有效的XML),因此您將CDATA包裹在其周圍,然後隨着您經歷。

更新

OK,所以上面沒有工作。當然不知道XSL是什麼樣的,直到問題發表評論爲止。以下不工作(想法來自this forum thread):

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="text" /> 
    <xsl:template match="."> 
     <xsl:value-of select="sample" /> 
    </xsl:template> 
</xsl:stylesheet> 

主要是<xsl:output method="text" />

另外,爲了投票,評論爲什麼。