XQuery-Basisoperationen ausführen
Für die Auswertung von XQuery-Ausdrücken können Sie die mit XFactory.prepareXQuery-Methoden erstellten Instanzen von XQueryExecutable verwenden.
Informationen zu diesem Vorgang
XQuery-Ausdrücke können mit einem JAXP-Objekt oder einem einfachen Java™-Zeichenfolgeobjekt an die Methode XFactory.prepareXQuery übergeben werden. Die resultierende XQueryExecutable-Instanz ist threadsicher und kann für die Auswertung eines XQuery-Ausdrucks in mehreren XML-Dokumenten wiederverwendet werden.
Vorgehensweise
Beispiel
Das folgende Basisbeispiel zeigt die Vorbereitung und Ausführung eines interpretierten XQuery-Ausdrucks.
// Zeichenfolge für den XQuery-Ausdruck erstellen
String expression = "/doc/name[@first='David']";
// Factory erstellen
XFactory factory = XFactory.newInstance();
// XQueryExecutable erstellen
XQueryExecutable xQueryExecutable = factory.prepareXQuery(expression);
// XML-Eingabequelle erstellen
String xml = "<doc<name first='John'>Wrong</name><name first='David'>Correct</name></doc>";
// Ausdruck ausführen und Ergebnisse in einem XSequenceCursor speichern
XSequenceCursor xSequenceCursor = xQueryExecutable.execute(new StreamSource(new ByteArrayInputStream(xml.getBytes())));
Das folgende Basisbeispiel zeigt die
Vorbereitung und Ausführung eines kompilierten XQuery-Ausdrucks.
// Zeichenfolge für den XQuery-Ausdruck erstellen
String expression = "/doc/name[@first='David']";
// Factory erstellen
XFactory factory = XFactory.newInstance();
// Neuen statischen Kontext aus der Factory erstellen
XStaticContext xStaticContext = factory.newStaticContext();
// Kompilierungsmodus für den Prozessor festlegen
xStaticContext.setUseCompiler(true);
// XQueryExecutable erstellen
XQueryExecutable xQueryExecutable = factory.prepareXQuery(expression, xStaticContext);
// XML-Eingabequelle erstellen
String xml = "<doc><name first='John'>Wrong</name><name first='David'>Correct</name></doc>";
// Ausdruck ausführen und Ergebnisse in einem XSequenceCursor speichern
XSequenceCursor xSequenceCursor = xQueryExecutable.execute(new StreamSource(new ByteArrayInputStream(xml.getBytes())));
Das folgende Basisbeispiel zeigt die
Vorbereitung und Ausführung von interpretierten XQuery-Ausdrücken mit Schemaerkennung.
// Zeichenfolge für den XQuery-Ausdruck erstellen
String expression = "/my:doc/name[@first='David']/@first";
// Factory erstellen
XFactory factory = XFactory.newInstance();
// Schemaquelle erstellen
String schema = "<xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'" +
" targetNamespace='http://www.schematype.ibm.com/UDSimple'" +
" xmlns:my='http://www.schematype.ibm.com/UDSimple'" +
" xmlns:smokey='http://www.schematype.ibm.com/UDSimple'>"
+" <xsd:element name='doc'>"
+ "<xsd:complexType> "
+ "<xsd:sequence>"
+ "<xsd:element name='name' minOccurs='0' maxOccurs='unbounded'>"
+ "<xsd:complexType>"
+ "<xsd:attribute name='first' type='xsd:string' use='optional'/>"
+ "</xsd:complexType>"
+ "</xsd:element>"
+ "</xsd:sequence>"
+ "</xsd:complexType>"
+ "</xsd:element>"
+ "</xsd:schema>";
// Schema laden
factory.registerSchema(new StreamSource(new ByteArrayInputStream(schema.getBytes())));
// Validierung aktivieren
factory.setValidating(true);
// Neuen statischen Kontext aus der Factory erstellen
XStaticContext xStaticContext = factory.newStaticContext();
// Neuen Namespace hinzufügen
xStaticContext.declareNamespace("my", "http://www.schematype.ibm.com/UDSimple");
// XQueryExecutable erstellen
XQueryExecutable xQueryExecutable = factory.prepareXQuery(expression, xStaticContext);
// XML-Eingabequelle erstellen
String xml = "<my:doc xmlns:my='http://www.schematype.ibm.com/UDSimple'>" +
"<name first='John'/><name first='David'/></my:doc>";
// Ausdruck ausführen und Ergebnisse in einem XSequenceCursor speichern
XSequenceCursor xSequenceCursor = xQueryExecutable.execute(new StreamSource(new ByteArrayInputStream(xml.getBytes())));