2016-08-01 22 views
0

Mein XQuery-Skript:Ausgabe von Text in XQuery mit saxon9he: Wie bekomme ich "<" and ">" in der Ausgabe selbst erstellt, nicht maskiert?

declare namespace output = "http://​www.​w3.​org/​2010/​xslt-​xquery-​ser​iali​zati​on"; 
declare option output:method "text"; 

for $row in all/row 
return ('"<row>","',data($row),'"&#xA;') 

Meine XML:

<all> 
    <row>one</row> 
    <row>two</row> 
    <row>three</row> 
</all> 

Meine Befehlszeile:

java -cp …/saxon9he.jar net.sf.saxon.Query '!omit-xml-declaration=yes' -s:./trouble-with-output-escaping.xml -q:./trouble-with-output-escaping.xqy 

als Meine Ausgabe von saxon9he erstellt: tatsächlich

"&lt;row&gt;"," one " 
"&lt;row&gt;"," two " 
"&lt;row&gt;"," three " 

I w Ameise zu haben, Ausgabe wie folgt:

"<row>","one" 
"<row>","two" 
"<row>","three" 

Während meiner Web-Untersuchung ich über XSLT die disable-output-escaping kam. Ich dachte: Wenn XQuery das hätte, könnte das helfen.

Update/0:

Eigentlich nichts (sichtbar) war falsch mit dem oben XQuery-Skript. Die Namespace-Deklaration muss über diese ersetzt werden:

declare namespace output = "http://www.w3.org/2010/xslt-xquery-serialization"; 

gleich aussieht, aber es ist nicht, wie Michael hingewiesen.

Nachdem dies abgeschlossen ist, ist das oben ein Beispiel für das Erstellen von Textausgaben mit XQuery.

string-join(…,"") 

wobei ":

In einem anderen Ort Michael zeigte, wie der Raum loszuwerden (0x20), ist, dass die Linien, das heißt die Raumzeichen vorhergehenden Zeilen 2 bis zum Ende zu trennen, wird verwendet, ... "wäre das ganze FLWOR.

Antwort

1

Es ist das Richtige zu tun, wenn Sie Output-Methode „Text“ von der Kommandozeile gesetzt, ist, dass

java net.sf.saxon.Query -q:test.xquery -s:test.xml -t !method=text 

aber du mich, warum die Einstellung der Serialisierungsoptionen aus verblüfft hatte innerhalb der Abfrage nicht ist Arbeiten. Betrachtet man es jedoch im Debugger, sehe ich, dass Ihr URI, der aussieht wie

http: // www. W3. Org/2010/xslt- xquery- ser iali zati Auf

enthält tatsächlich mehrere Vorkommen von Dezimal 8203, hex 200B, die ein Null-Breite-Raum ist. Dies bedeutet, dass der URI nicht mit dem Serialisierungsausgabe-URI übereinstimmt und "declare option" mit einem nicht erkannten URI ignoriert wird.

+0

Ihre Befehlszeile verursacht hier eine Ausnahme: "Ungültiger Wert für die Serialisierungsmethode: muss xml, html, xhtml, text oder ein QName im '{uri} local' Formular sein" –

+1

Ich tippte den URI manuell (wie abgebildet)), und es hat funktioniert - wie du erklärt hast. (Ich hatte die URI schon vorher aus einem E-Book kopiert, und ich musste trotzdem einige seltsame Bindestriche entfernen.) Big, big thank you !!! –

+0

Nur eine Erinnerung, dass die SO-Konvention nicht zu danken ist, aber die Antwort als akzeptiert zu markieren. Das grüne Häkchen ist für zukünftige Besucher viel einfacher zu erkennen. –