0

我正在使用 XSLT 生成的 XQuery 中尝试此操作(假设 doc('input:instance') 确实返回了有效的 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

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

显然我是 XSL 的新手......

4

2 回答 2

0

这与 XQuery 无关(您可以使用任何语言构建 XSLT 样式表,甚至是 XSLT 本身!)。

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

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

[...]xsl:text 元素的内容是单个文本节点,其值形成新文本节点的字符串值。

于 2011-04-28T15:35:28.047 回答
0

您需要的是使用 XML 序列化将 XML 文档(这里是 doc() 返回的文档)序列化为字符串的能力。

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

saxon:serialize(document, 'xml')
于 2011-04-28T17:45:02.873 回答