2011-04-28 36 views
0

我在XQuery中尝试此操作(假定doc('input:instance')确实返回一个有效的XML文档),这是使用XSLT将输出副本转换为字符串并转义XML特殊字符(如小于(<)和大于(>)符号)

let $a:= <xsl:text>"<xsl:copy-of select="doc('input:instance')//A" />"</xsl:text> 
let $p := <xsl:text>"<xsl:copy-of select="doc('input:instance')//P" />"</xsl:text> 
let $r := <xsl:text>"<xsl:copy-of select="doc('input:instance')//R" />"</xsl:text> 

产生的,但我得到的错误:

xsl:text must not contain child elements 

我如何使用XPath在XSL检索XML结果:复制和再编码将结果格式化为字符串时在结果中收到特殊字符?如果可能的话,我会很乐意使用CDATA节(如果我这样做,而不是上面的xsl:text,则xsl:copy-of不会被评估,因为它会成为CDATA节的一部分)。

显然,我是一个新人,XSL ...

回答

0

你所需要的就是序列化的XML文档的能力(这里由文档返回文档())使用XML序列化,转换成字符串。

各种XQuery实现都有用于此目的的扩展函数。例如,如果您使用的是撒克逊:

saxon:serialize(document, 'xml') 
+0

我使用Orbeon中的xml转换器处理器来实现类似的效果(序列化的XML) – user557060 2011-05-09 09:15:23

0

此无关使用XQuery(你可以建设有任何语言XSLT样式表,甚至XSLT itslef!)。

http://www.w3.org/TR/xslt20/#xsl-text

<!-- Category: instruction --> 
<xsl:text 
    [disable-output-escaping]? = "yes" | "no"> 
    <!-- Content: #PCDATA --> 
</xsl:text> 

[...] The content of the xsl:text element is a single text node whose value forms the string value of the new text node.

相关问题