Websphere Message Broker: der Zugriff auf die XML-Elemente in ESQL
Websphere Message Broker: Datei im Beispiel.
Ich habe eine XML-Datei mit wiederholenden element-Struktur. Wie kann ich den Zugriff auf und ändern den Wert eines bestimmten Elements in ESQL.
Ich worte folgenden code..
CREATE PROCEDURE CopyEntireMessage() BEGIN
--SET OutputRoot = InputRoot;
DECLARE I INTEGER 1;
DECLARE J INTEGER;
SET J = CARDINALITY(OutputRoot.*[]);
WHILE I < J DO
SET OutputRoot = InputRoot;
SET OutputRoot.XMLNS.person.student[I].name = 'XYZ';
SET I = I + 1;
END WHILE;
END;
Aber es funktioniert nicht. Kommissionierung bis die Datei aus dem input-Ordner, aber ich kann nichts sehen in der Ausgabe-Ordner.
Aber wenn ich kommentieren
SET OutputRoot.XMLNS.student[I].name = 'XYZ';
dann Datei steht in der Ausgabe-Ordner, wie es ist, ohne jede Veränderung.
Meine XML Datei ist wie folgt
<person>
<student>
<name>ABC</name>
<age>20</age>
<address>city1</address>
</student>
<student>
<name>PQR</name>
<age>20</age>
<address>city2</address>
</student>
</person>
kann mir keiner helfen?
InformationsquelleAutor Neha Raje | 2014-07-11
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dieser compute-Modul sollte das tun, was Sie brauchen, getestet 9001 auf linux:
Dazu ein paar Anmerkungen, Erstens ist es keine gute Praxis, neu zu definieren, die automatisch generierten Prozeduren, wenn Sie brauchen, um die Wiederverwendung von Funktionalität, die legt jedes Feld in einer Nachricht, dann wäre es klug, um zu erstellen Sie eine neue Prozedur, um dies zu tun.
XMLNS ist auch veraltet, so verwenden Sie XMLNSC statt, es ist eine höhere Leistung und verfügt über die gleichen Funktionen wie XMLNS die erhalten nur die Unterstützung von legacy-Anwendungen.
Aber wenn ich es mit While-Schleife in Main().. es funktioniert nicht.. keine Ahnung? oder warum wird es nicht gleich mit Dabei?
Ich denke, das größte problem ist, dass Ihre wählen Sie Kriterien in Bezug auf die Kardinalität der Klausel ist falsch. Vorausgesetzt, Sie haben keine Kopf-OutputRoot.*[] Ich denke, dass wird passend der einzigen "Person" - element die Kardinalität 1, die Schleife Bedingung ist daher niemals wahr, und Sie nur fallen durch die while-Schleife ohne jegliche Bearbeitung.
Jede iteration der Schleife sind Sie auch ein überschreiben der gesamten Output-Struktur mit dem Eingangs-Baum, so dass selbst wenn Sie die Tat ausführen der Schleife und hatte die Kardinalität zeigt auf dem richtigen Weg, Sie würden nur die änderung auf das Letzte element.
DECLARE I INTEGER 0; DECLARE J INTEGER; SET J = CARDINALITY(OutputRoot.XMLNSc.person.student[]); WHILE I <= J DO SET OutputRoot.XMLNSC.person.student[I].name = 'AAAA'; SET I = I + 1; END WHILE;
InformationsquelleAutor Dave
Ich denke, dass Ihr code sollte wie folgt sein:
Nutzlos zu machen-Zuordnung wie "OutputRoot = InputRoot" mehrere Male, Sie müssen es nur einmal.
Bitte, können Sie Folgendes tun: poste den kompletten code von "ESQL-MODUL" (mit Ihrer Vorgehensweise innen) und prüfen Sie, welche parser Sie tatsächlich nutzen (es muss in den Einstellungen der input-Knoten von der Strömung). Und auch, können Sie post-Wert von "Compute-Modus" Eigenschaft der Knoten?
Parser: XMLNS : XML Nachrichten (namespace beachten)
Compute-Modus: Meldung
Parser-und compute-Modus richtig angezeigt wird, was über "ESQL-MODUL" - code, können Sie es veröffentlichen?
InformationsquelleAutor user3714601
Versuchen Sie es mit dem grafischen debugger bei der Lösung dieser Art von Problemen, ermöglicht es Ihnen, Schritt durch die ESQL-code und sehen den Baum gebaut. Sie würde leicht in der Lage sein zu sehen, wo wurde der code nicht tut, was man erwartet.
https://www-01.ibm.com/support/knowledgecenter/SSMKHH_9.0.0/com.ibm.etools.mft.doc/ag11050_.htm
InformationsquelleAutor Sebastian