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 に答える