XPath-Basisoperationen ausführen
Für die Auswertung von XPath-Ausdrücken können Sie die mit XFactory.prepareXPath-Methoden erstellten Instanzen von XPathExecutable verwenden.
Informationen zu diesem Vorgang
XPath-Ausdrücke können mit einem JAXP-Objekt oder einem einfachen Java™-Zeichenfolgeobjekt an die Methode XFactory.prepareXPath übergeben werden. Die resultierende XPathExecutable-Instanz ist threadsicher und kann für die Auswertung eines XPath-Ausdrucks in mehreren XML-Dokumenten wiederverwendet werden.
Vorgehensweise
Beispiel
Das folgende Basisbeispiel zeigt die Vorbereitung und Ausführung eines interpretierten XPath-Ausdrucks.
// Zeichenfolge für den XPath-Ausdruck erstellen
String expression = "/doc/something";
// Factory erstellen
XFactory factory = XFactory.newInstance();
// Ausführbares XPath-Objekt für den Ausdruck erstellen
XPathExecutable xPathExecutable = factory.prepareXPath(expression);
// XML-Eingabequelle erstellen
String xml = "<doc><something>something is selected</something></doc>";
// Ausdruck ausführen und Ergebnisse in einem XSequenceCursor speichern
XSequenceCursor xSequenceCursor = xPathExecutable.execute(new StreamSource(new ByteArrayInputStream(xml.getBytes())));
Das folgende Basisbeispiel zeigt die
Vorbereitung und Ausführung eines kompilierten XPath-Ausdrucks.
// Zeichenfolge für den XPath-Ausdruck erstellen
String expression = "/doc/something";
// 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);
// Ausführbares XPath-Objekt für den Ausdruck erstellen
XPathExecutable xPathExecutable = factory.prepareXPath(expression, xStaticContext);
// XML-Eingabequelle erstellen
String xml = "<doc><something>something is selected</something></doc>";
// Ausdruck ausführen und Ergebnisse in einem XSequenceCursor speichern
XSequenceCursor xSequenceCursor = xPathExecutable.execute(new StreamSource(new ByteArrayInputStream(xml.getBytes())));
Das folgende Basisbeispiel zeigt die
Vorbereitung und Ausführung von interpretierten XPath-Ausdrücken mit Schemavalidierung.
// Zeichenfolge für den XPath-Ausdruck erstellen
String expression = "/doc/byte cast as my:derived1-byte-enumeration-Type";
// 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:simpleType name='derived1-byte-enumeration-Type'>"
+ " <xsd:restriction base='xsd:byte'>"
+ " <xsd:enumeration value='1' />"
+ " <xsd:enumeration value='-1' />"
+ " <xsd:enumeration value='0' />"
+ " <xsd:enumeration value='127' />"
+ " <xsd:enumeration value='-128' />"
+ " <xsd:enumeration value='32' />"
+ " <xsd:enumeration value='-32' />"
+ " <xsd:enumeration value='8' />"
+ " <xsd:enumeration value='-8' />"
+ " <xsd:enumeration value='2' />"
+ " <xsd:enumeration value='-2' />"
+ " </xsd:restriction>"
+ " </xsd:simpleType>"
+ "</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");
// Ausführbares XPath-Objekt für den Ausdruck erstellen
XPathExecutable xPathExecutable = factory.prepareXPath(expression, xStaticContext);
// XML-Eingabequelle erstellen
String xml = "<doc>" +
" <byte>1</byte>" +
"</doc>";
// Ausdruck ausführen und Ergebnisse in einem XSequenceCursor speichern
XSequenceCursor xSequenceCursor = xPathExecutable.execute(new StreamSource(new ByteArrayInputStream(xml.getBytes())));