2008-10-02 50 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发出该元素的副本。