2011-04-28 1 views
0

J'essaye ceci dans un XQuery (supposons que doc ('input: instance') retourner un document XML valide) qui est généré en utilisant XSLTConvertir la copie de la sortie en chaîne et échapper les caractères spéciaux XML (comme les symboles inférieurs à (<) et supérieurs à (>)

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> 

Mais je reçois l'erreur:

xsl:text must not contain child elements 

Comment puis-je obtenir des résultats XML à l'aide du XPath dans xsl: copy-of et puis encodez la les caractères spéciaux reçus dans le résultat lors du formatage du résultat en tant que chaîne? Je serais heureux d'utiliser la section CDATA si c'est possible (si je fais cela au lieu de xsl: text ci-dessus, xsl: copy-of n'est pas évalué puisqu'il fait partie de la section CDATA).

Il est évident que je suis un nouveau venu ... XSL

Répondre

0

Qu'est-ce que vous avez besoin ici est la possibilité de sérialiser un document XML (ici le document retourné par doc()) en utilisant la sérialisation XML, dans une chaîne.

Diverses implémentations XQuery ont des fonctions d'extension à cet effet. Par exemple, si vous utilisez Saxon:

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

J'ai utilisé le processeur xml-converter dans Orbeon pour obtenir un effet similaire (XML sérialisé) – user557060

0

Cela n'a rien à voir avec XQuery (vous pourriez construire la feuille de style XSLT avec toutes les langues, même mmêe XSLT!).

De 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.

Questions connexes