2010-05-25 17 views
0

J'ai une feuille de calcul Excel au format XML qui contientXQuery fn: remplaçons comporte pas comme prévu

<Cell ss:StyleID="s127"><Data ss:Type="String">Replace Me</Data></Cell> 

Je veux remplacer @ A01-remplacer par une autre chaîne. J'utilise la fonction de remplacer XQuery comme ceci:

let $excel := doc("document.xml") 

let $test := "another string" 

return replace($excel, "Replace Me", $test) 

Avant d'appeler remplacer, la variable $ Excel est XML valide sur la sortie. Toutefois, lorsque je génère $ excel après avoir appelé la fonction de remplacement, toutes les balises XML ont été supprimées et $ excel est une chaîne avec le contenu des cellules comme valeurs. Je voudrais garder les balises XML là.

Ce que je pense est

<Cell ss:StyleID="s127"><Data ss:Type="String">another string</Data></Cell> 

Cependant, je reçois

another string 

Toutes les balises XML sont supprimés.

Des idées?

Répondre

0

fn:replace est une simple fonction de manipulation de chaînes de XQuery.

Cette fonction fonctionne avec une chaîne et non nœud() * types data-type.

let $replaced-str := fn:replace($excel/Data/text(), "Replace Me", $test) 

doit renvoyer une autre chaîne.

Si vous souhaitez utiliser un document XML, vous devez utiliser la fonction de type xdmp:node-replace spécifique à MarkLogic XmlDatabase.

Si vous voulez un XQuery/Xml/Memory basé node-replace simple alors vous pouvez écrire une méthode de remplacement récursive simple qui accepte un XPath et recrée un nouveau nœud. Ou consultez this MarkLogic-commons example.