2009-12-10 67 views
1

我有下面的XML:HTML實體不會在瀏覽器中正確呈現XSLT變換後

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<example> 
    <contactInfo> 
     <id>12319221</id> 
     <name>Jerry P</name> 
     <market> 
      <name>Test</name> 
      <phone>800.555.1010</phone> 
     </market> 
     <agent> 
      <name>Test User</name> 
      <email>[email protected]</email> 
     </agent> 
     <summary>&amp;#8220;Jerry just gets it!&amp;#8221;</summary> 
    </contactInfo> 
</example> 

我的編碼特殊字符爲HTML實體當我保存這個XML文檔,智能引號,因此如何編碼爲&#8220;和&#8221。

我使用XSL,通過Java/Xalan,它在XML文檔轉換爲HTML:

<?xml version="1.0" encoding="UTF-8" ?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:param name="wsHost"></xsl:param> 
<xsl:param name="serverId"></xsl:param> 

<xsl:template match="/showcase"> 
    <html xmlns="http://www.w3.org/1999/xhtml"> 
     <head> 
      <title>Example</title> 
     </head> 
     <body> 
      <div id="profile"> 
       <xsl:apply-templates/> 
      </div> 
     </body> 
    </html> 
</xsl:template> 

<!-- Contact Info section --> 
<xsl:template match="/example/contactInfo"> 
    <span class="sectionTitle">Contact Info:</span> 
    <div id="contactInfo"> 
     <xsl:if test="name"> 
      <strong>Candidate Name:</strong>&#160;<xsl:value-of disable-output-escaping="yes" select="name" /><br /> 
     </xsl:if> 

     <xsl:if test="id"> 
      <strong>Candidate ID:</strong>&#160;<xsl:value-of disable-output-escaping="yes" select="id" /><br /> 
     </xsl:if> 

     <xsl:if test="market"> 
      <xsl:if test="market/name"> 
       <strong>Market Name:</strong>&#160;<xsl:value-of disable-output-escaping="yes" select="market/name" /><br /> 
      </xsl:if> 

      <xsl:if test="market/phone"> 
       <strong>Market Phone:</strong>&#160;<xsl:value-of disable-output-escaping="yes" select="market/phone" /><br /> 
      </xsl:if> 
     </xsl:if> 

     <xsl:if test="agent"> 
      <xsl:if test="agent/name"> 
       <strong>Agent Name:</strong>&#160;<xsl:value-of disable-output-escaping="yes" select="agent/name" /><br /> 
      </xsl:if> 

      <xsl:if test="agent/email"> 
       <strong>Agent Email:</strong>&#160;<xsl:value-of disable-output-escaping="yes" select="agent/email" /><br /> 
      </xsl:if> 
     </xsl:if> 

     <xsl:if test="summary"> 
       <strong>Summary:</strong>&#160;<xsl:value-of disable-output-escaping="yes" select="summary" /><br /> 
     </xsl:if> 
    </div> 
    <hr size="1" noshade="noshade" class="rule" /> 
</xsl:template> 
</xsl:stylesheet> 

,從那麼變換寫入到瀏覽器產生的HTML。這裏是我注意到字符編碼問題的地方。  (數字值)顯示爲黑色菱形問號(firefox)或框字符(即),以及先前編碼的實體(「/」)。

另外,也許最大的提示是,當在linux平臺上轉換此xml文件(然後將html寫入firefox)時,所有內容都顯示正確。只有在窗口完成變換時纔會出現字符編碼問題(在Firefox和ie中)。

我編碼的實體不正確或可能不指定一個字符集的地方?

回答

0

那麼你還沒有在HTML文檔中設置一個編碼。不知道這是否是問題,但這將是我第一次嘗試修復。

嘗試添加:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

到你的頭上。

+0

確定,所以我已經添加: 的 現在生成的html收到了一個元標記,其內容類型爲: 我希望能夠呈現html標記,都包含在原始的XML(HTML可能不是格式良好),這將要求我不能逃脫<到& lt ;. 但我也需要轉義—到&#8212; (長連字符),否則它們顯示爲窗口塊(包括firefox/ie)。 我應該逃避一些而不是其他人嗎? – abargnesi 2009-12-10 16:55:49

+0

老實說,我onyl發佈了一個答案,因爲沒有一個編碼附加到HTML跳到otu在我身上...我用XSL/XSLT很少,所以我不知道我可以準確地回答你的評論。但即時通訊想知道如果它可以改變的東西,如果你添加到特定元素的XML文件的XML NS ...這會以任何方式幫助你的轉變?或者是因爲可能的格式錯誤而導致無法訪問?將包含html的元素的內容包裝在CDATA部分中會更好嗎? – prodigitalson 2009-12-10 17:09:37

3

你說你在使用Java/Xalan。你是否在輸出流或流寫入器?如果是這樣,你需要明確設置編碼在這一點上:

... new OutputStreamWriter(stream,"UTF-8"); 

就包括UTF8頭實際上並沒有導致輸出文件是UTF8編碼。

+0

同意。如果您使用十六進制查看器檢查Windows窗口中的HTML輸出,您可能會將智能引號視爲「93」和「94」,將NBSP視爲「A0」 - 它們的windows-1252編碼。它可以像你期望的那樣在你的Linux機器上運行,因爲UTF-8恰好是該平臺的默認編碼。 – 2009-12-11 03:11:43

相關問題