Informationen mithilfe von XPath 1.0 und einem JavaCompute-Knoten aus einer Nachricht extrahieren

XPath wurde zwar für die Verwendung mit XML-Dokumenten entworfen, kann aber zu Abfragezwecken auch auf anderen Baumstrukturen angewendet werden.

WebSphere Message Broker wählt Elemente unabhängig vom Format des Bitstroms aus der logischen Nachrichtenbaumstruktur aus. Die dort verwendete Terminologie basiert auf der Terminologie, die in der W3C-Definition von XPath 1.0 verwendet wird. Weitere Informationen zu XPath und der W3C-Definition des XPath 1.0-Standards finden Sie unter W3C XPath 1.0 Spezifikation. Der MbXPath-Abschnitt in der Benutzerdefinierte Java-Erweiterungs-API-Dokumentation enthält Beispiele für die Verwendung von XPath.

Dieser Abschnitt enthält die folgenden Informationen:

Nachrichteninformationen mithilfe der Methode 'evaluateXPath' extrahieren

Die Methode evaluateXPath() ist in der benutzerdefinierten Java-Knoten-API enthalten. Sie unterstützt XPath 1.0, wobei folgende Ausnahmebedingungen zu beachten sind:
  • Namespace-Achse und Namespace-Knotentyp. Durch die Namespace-Achse werden die tatsächlichen Knoten der XML-Namespace-Deklaration für ein bestimmtes Element wiedergegeben. Dadurch können Sie XML-Präfixe oder URI-Deklarationen in einem XPath-Ausdruck ändern. Die Achse gibt für Bitströme ohne XML eine leere Knotengruppe zurück.
  • Bei der Verwendung der Funktion 'id()' wird die Ausnahmebedingung 'MbRecoverableException' ausgelöst.

Die Methode evaluateXPath() wird in einem MbMessage-Objekt (für absolute Pfade) oder in einem MbElement-Objekt (für relative Pfade) aufgerufen. Der XPath-Ausdruck wird als Zeichenfolgeparameter an die Methode übermittelt. Es wird auch ein zweites Format dieser Methode für ein MbXPath-Objekt bereitgestellt. Dieses Objekt bindet einen XPath-Ausdruck mit variablen Bindungen und Namespacezuordnungen ein, falls diese erforderlich sind.

Durch die Methode evaluateXPath() wird je nach Rückgabetyp des Ausdrucks ein Objekt mit einem der folgenden vier Typen zurückgegeben:
  • java.lang.Boolean für den booleschen XPath-Typ
  • java.lang.Double für den XPath-Nummerntyp
  • java.lang.String für den XPath-Zeichenfolgetyp
  • java.util.List für die XPath-Knotengruppe. Die Schnittstelle 'List' stellt eine geordnete Reihe von Objekten, in diesem Fall MbElementen, dar. Damit wird der direkte Zugriff auf die Elemente oder der Abruf eines Iterators oder eines MbElement-Bereichs ermöglicht.

XPath-Variablenbindung

XPath 1.0 unterstützt die Möglichkeit eines Verweises auf Variablen, die bereits vor der Auswertung des Ausdrucks, in dem sie enthalten sind, zugeordnet wurden. Die MbXPath-Klasse verfügt über drei Methoden, mit denen diese Variablenbindungen im Java-Benutzercode zugeordnet und von dort entfernt werden können. Der Wert muss dabei einem der folgenden vier unterstützten XPath 1.0-Typen entsprechen:
  • Boolesch
  • Knotengruppe
  • Anzahl
  • Zeichenfolge

XPath-Namespace-Unterstützung

In XML-Nachrichten wird mithilfe einer Zuordnung von einem abgekürzten Namespacepräfix für die vollständige Namespace-URI auf Namespaces verwiesen; dies wird im folgenden XML-Beispiel gezeigt:
<ns1:aaa xmlns:ns1='http://mydomain.com/namespace1'
         xmlns:ns2='http://mydomain.com/namespace2'>
  <ns2:aaa>
    <ns1:bbb/>
  </ns2:aaa>
</ns1:aaa>

Das Namespacepräfix reicht zwar aus, um den Namespace darzustellen; es hat jedoch nur in dem Dokument Bedeutung, das diese Zuordnung definiert. Die globale Bedeutung wird durch die Namespace-URI definiert. Ebenso hat das Konzept des Namespacepräfix keine Bedeutung für Dokumente, die in einem Nachrichtenfluss generiert wurden, da eine Namespace-URI ohne Definition einer XMLNS-Zuordnung zu einem Syntaxelement zugeordnet werden kann.

Aus diesem Grund legen die XMLNSC- und MRM-Parser die Namespace-URI nur für den Broker und den Benutzercode (ESQL oder benutzerdefinierter Code) offen. Unter Verwendung von ESQL können Sie Ihre eigenen Zuordnungen einrichten, um Abkürzungen für die URIs, die sehr lang sein können, zu erstellen. Diese Zuordnungen haben keinen Zusammenhang mit den Präfixen, die im XML-Dokument definiert sind (sie können jedoch den gleichen Namen haben).

Mithilfe des XPath-Prozessors können Sie Namespaceabkürzungen zu URIs zuordnen, die während der Auswertung erweitert werden. Die MbXPath-Klasse enthält Methoden zum Zuordnen und Entfernen dieser Namespace-Zuordnungen. Auf das XML-Beispiel kann mit folgender Methode zugegriffen werden:
MbMessage msg = assembly.getMessage();
List chapters= (List)msg.evaluateXPath("/document/chapter");
// Gibt eine Liste aller Kapitel im Dokument zurück (Länge 1)

MbElement chapter = (MbElement)chapters.get(0);  // erstes Kapitel

// Die Werte können mithilfe von XPath auch direkt extrahiert werden
String title = (String)msg.evaluateXPath("string(/document/chapter/@title)");

String chapterText = (String)msg.evaluateXPath("string(/document/chapter/text())");

Nachricht mithilfe von XPath-Ausdrücken aktualisieren

Bei der Implementierung von XPath durch WebSphere Message Broker werden die folgenden zusätzlichen Funktionen zum Ändern der Nachrichtenbaumstruktur bereitgestellt:
set-local-name(Objekt)
Legt für den lokalen Teil des erweiterten Namens im Kontextknoten den im Argument angegebenen Wert fest. Das Objekt, bei dem es sich um einen beliebigen gültigen Ausdruck handeln kann, wird in eine Zeichenfolge umgewandelt, als ob ein Aufruf für die Zeichenfolgefunktion verwendet werden würde.
set-namespace-uri(Objekt)
Legt für die Namespace-URI des erweiterten Namens im Kontextknoten den im Argument angegebenen Wert fest. Das Objekt, bei dem es sich um einen beliebigen gültigen Ausdruck handeln kann, wird in eine Zeichenfolge umgewandelt, als ob ein Aufruf für die Zeichenfolgefunktion verwendet werden würde.
set-value(Objekt)
Durch diese Funktion wird für den Zeichenfolgewert des Kontextknotens der im Argument angegebene Wert festgelegt. Das Objekt, bei dem es sich um einen beliebigen gültigen Ausdruck handeln kann, wird in eine Zeichenfolge umgewandelt, als ob ein Aufruf für die Zeichenfolgefunktion verwendet werden würde.
Damit Syntaxelement-Baumstrukturen erstellt und geändert werden können, steht zusätzlich zu den 13 in der XPath 1.0-Spezifikation definierten Achsen die folgende Achse zur Verfügung:
select-or-create::Name oder ?Name
?Name entspricht select-or-create::Name. Wenn es sich bei Name um '@name' handelt, wird ein Attribut erstellt oder ausgewählt. Dadurch werden untergeordnete Knoten ausgewählt, die mit dem angegebenen Namen übereinstimmen, oder es werden gemäß den folgenden Regeln neue Knoten erstellt:
  • ?Name wählt untergeordnete Elemente mit der Bezeichnung Name aus, falls diese vorhanden sind. Falls kein untergeordnetes Element mit der Bezeichnung Name vorhanden ist, wird es von ?Name als letztes untergeordnetes Element erstellt und anschließend ausgewählt.
  • ?$Name erstellt Name als letztes untergeordnetes Element und wählt es anschließend aus.
  • ?^Name erstellt Name als erstes untergeordnetes Element und wählt es anschließend aus.
  • ?>Name erstellt Name als nächstes gleichgeordnetes Element und wählt es anschließend aus.
  • ?<Name erstellt Name als vorhergehendes gleichgeordnetes Element und wählt es anschließend aus.
Zugehörige Verweise
JavaCompute-Knoten
Zugehörige Informationen
Benutzerdefinierte Java-Erweiterungs-API
Bemerkungen | Marken | Downloads | Bibliothek | Unterstützung | Feedback

Copyright IBM Corporation 1999, 2009Copyright IBM Corporation 1999, 2009.
Letzte Aktualisierung : 2009-02-17 15:28:29

ac30390_