2008-10-02 52 views
17

我有一個包含新聞報道的XML文檔,新聞報道的正文元素在純文本中包含p標籤。當我使用XSL檢索身體時,例如如何保留標記標籤?

<xsl:value-of select="body" /> 

p標籤似乎被剝離出來。我正在使用Visual Studio 2005的XSL實現。

有沒有人有任何想法如何避免這種情況?謝謝。

回答

24

嘗試使用

<xsl:copy-of select="body"/> 

代替。從w3schools' documentation on same

<xsl:copy-of>元件創建當前節點的 副本。

注意:命名空間節點,子節點 和當前節點的屬性也自動複製爲 !

1

如果您控制輸入文檔,CDATA是正確的選擇。

+0

謝謝,但我無法更改文檔的格式。 – gilles27 2008-10-02 13:30:56

+0

如果我使用CDATA封裝我的嵌套HTML,我得到了文字HTML,我想保留換行符(即段落標籤)。 – PeterX 2013-11-22 07:06:46

-1

這是因爲引擎正在解釋標籤(不包括輸出)。您需要使用「disable-output-escaping = yes | no」屬性指定您想要的內容「原樣」。

<xsl:value-of select="body" disable-output-escaping="yes"/> 
+0

我試過這個,但沒有任何區別。 – gilles27 2008-10-02 13:31:35

+0

嘗試使用false ...我總是不記得正確使用 – 2008-10-02 13:32:43

4

如果你沒有在輸入文檔控制,複製的應工作:

http://www.xml.com/pub/a/2000/06/07/transforming/index.html

「的XSL:複製的元素,在另一方面,可以複製如果xsl:copy-of元素的select屬性具有適當的值,則包括屬性,在下面的示例中,模板複製標題元素節點及其所有後代節點 - in換句話說,完整的標題元素,包括它們的標籤,子元素和屬性:「

<xsl:template match="title"> 
    <xsl:copy-of select="*"/> 
</xsl:template> 
1

XML元素的值 - 不僅在XSLT中,而且在DOM實現中都是如此 - 是所有後代文本節點的串聯。在XSLT中,value-of發出元素的值,而copy-of發出該元素的副本。