2013-03-19 87 views
1

當前,我嘗試輸出包含「&」符號的某個XML標記(&)時遇到了一些麻煩。XSLT在遇到&符號時崩潰

所以更具體一點,當我嘗試輸出下面的標籤。我得到一個錯誤

<fullname>Ben & Jerry</fullname> 

然而使用下面的標籤運行良好

<fullname>Ben and Jerry</fullname> 

我已經用下面的代碼

<xsl:template match="fullname"> 
    <xsl:apply-templates/> 
</xsl:template> 

嘗試過了,我也試過

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

兩者都導致錯誤要麼。我怎麼得到它的工作的唯一方法是使用CDATA這樣

<fullname><![CDATA[Ben & Jerry]]></fullname> 

不過,我有過我收到的XML文件沒有控制權,並因此,這不是一個可行的選擇。在XSLT中我可以做些什麼來規避/解決這個問題?

謝謝!

+5

如果它包含未轉義的&,它是** not ** xml。告訴誰提供你的XML他們失敗了。 – 2013-03-19 17:23:02

+0

謝謝唐羅比。但是,我無法控制輸出的XML文件。因此,我試圖找到一種解決方法。理想情況下,雖然數據中仍包含「與」符號,但如果XSLT只忽略符號,我也會很高興。 – 2013-03-19 17:39:03

+1

@Jaco:「無控制」是一個相對術語。如果你被要求產生100個方程,其中兩個偶數加起來爲奇數,你會說這是不可能的:這些要求是錯誤的。當你被要求生產不是XML的XML時也是如此。類似的考慮適用於輸入XML。我並不是說你不能爲錯誤的輸入或錯誤的要求考慮解決方法,但是當我聽到「我無法控制」的時候,我總是會想,「這不完全正確。」 – LarsH 2013-03-19 18:22:14

回答

5

&符不能在格式良好的XML中出現。你的榜樣應該是

<fullname>Ben &amp; Jerry</fullname> 

我不認爲你將能夠解決這個問題與任何XSLT處理器。您需要修復生成XML的任何內容,因此格式良好。

+0

我仍然想知道這個例子是否意味着要輸入XML。 OP說:「當我嘗試輸出以下標籤時」。但我認爲你假設他試圖從輸入的準XML文檔中複製它,我認爲你是對的。 – LarsH 2013-03-19 18:50:43

1

所以更具體一點,當我嘗試輸出下面的標籤。我得到一個錯誤

<fullname>Ben & Jerry</fullname>

其實,這不是一個標籤。這是一個開始標記,後跟一些無效內容,後跟一個結束標記。

您無法使用XSLT輸出無效內容。如果您必須輸出非XML的內容,則需要使用非XML工具才能完成。而且你更有可能在非XML論壇上獲得建議。

你沒有明確的是你的輸入和輸出。你說你試圖輸出無效的XML,但是你不會說輸入是什麼。