PARSE XML
operand1
[INTO [PATH
operand2]
[NAME operand3]
[VALUE operand4]]
|
|
[[NORMALIZE ] NAMESPACE
operand5 PREFIX
operand6]
|
|
statement... | |
END-PARSE
|
(structured mode only) |
[LOOP ]
|
(reporting mode only) |
Dieses Dokument behandelt folgende Themen:
Eine Erläuterung der in dem Syntax-Diagramm verwendeten Symbole entnehmen Sie dem Abschnitt Syntax-Symbole.
Gehört zur Funktionsgruppe: Internet und XML
Das Statement PARSE XML
ermöglicht es Ihnen, XML-Dokumente
aus einem Natural-Programm zu parsen. Als Voraussetzung für die Benutzung
dieses Statements muss die Library ICU installiert sein. Siehe auch
Statements für Internet-
und XML-Zugang im Leitfaden zur
Programmierung.
Es empfiehlt sich, dynamische Variablen zu benutzen, wenn Sie das
Statement PARSE XML
verwenden. Der Grund dafür ist, dass es
unmöglich ist, die Länge einer statischen Variablen zu ermitteln. Der Einsatz
von statischen Variablen könnte wiederum zum Abschneiden des Wertes führen, der
in die Variable geschrieben werden soll.
Informationen bezüglich Unicode-Support finden Sie im Abschnitt
PARSE
XML
in der Unicode and Code Page
Support-Dokumentation.
Im Folgenden finden Sie Bezeichner, die in Pfad-Zeichenketten zur Darstellung der verschiedenen Datentypen in einem XML-Dokument (auf ASCII-basierten Systemen) benutzt werden:
Markierung | XML-Daten | Position in der Pfad-Zeichenkette |
---|---|---|
? | Verarbeitungsanweisung (außer bei
<?XML...?> )
|
Ende |
! | Kommentar | Ende |
C | CDATA -Abschnitt
|
Ende |
@ | Attribut (auf Großrechnern: § oder @, je nach Code Page und Terminal Emulation) | vor dem Attribut-Namen |
/ | Abschließender Tag und/oder Trennzeichen für Parent-Namen in einem Pfad | Ende oder zwischen Parent-Namen |
$ | Geparste Daten-Zeichendatenkette | Ende |
Wenn Sie diese zusätzlichen Markierungen im Pfad-String benutzen, ist es leichter, die verschiedenen Elemente des XML-Dokuments im Ausgabedokument zu identifizieren.
Zur Angabe des Global Namespace verwenden Sie einen Doppelpunkt (:) als Präfix und eine leere URI.
Die folgenden Natural-Systemvariablen werden für jedes abgesetzte
PARSE
-Statement automatisch erzeugt:
Durch Angabe der Notation (r)
hinter *PARSE-TYPE
,
*PARSE-LEVEL
,
*PARSE-ROW
,
*PARSE-COL
und
*PARSE-NAMESPACE-URI
können Sie den
Statement-Label bzw. die Sourcecode-Zeilennummer des Statements angeben, in dem
bzw. in der die PARSE
-Anweisung abgesetzt wurde. Wenn
(r)
nicht angegeben wird, stellt die
betreffende Systemvariable die Systemvariable der XML-Daten dar, die gerade in
der zur Zeit aktiven PARSE
-Verarbeitungsschleife abgearbeitet
werden.
Weitere Informationen über diese Systemvariablen finden Sie in der Systemvariablen-Dokumentation.
Operanden-Definitionstabelle:
Operand | Mögliche Struktur | Mögliche Formate | Referenzierung erlaubt | Dynam. Definition | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
operand1 | C | S | A | U | B | ja | nein | |||||||||||||
operand2 | S | A | U | B | ja | ja | ||||||||||||||
operand3 | S | A | U | B | ja | ja | ||||||||||||||
operand4 | S | A | U | B | ja | ja | ||||||||||||||
operand5 | S | A | A | U | B | ja | ja | |||||||||||||
operand6 | S | A | A | U | B | ja | ja |
Syntax-Element-Beschreibung:
operand1 | operand1 stellt das betreffende
XML-Dokument dar. Das XML-Dokument kann nicht geändert werden, während es vom
Parser abgearbeitet wird.
Wenn Sie versuchen, während des Parse-Vorgangs das XML-Dokument zu ändern (indem Sie es zum Beispiel überschreiben), wird eine Fehlermeldung angezeigt. |
---|---|
operand2 |
operand2 stellt den Pfad der Daten im XML-Dokument dar. Der Pfad ( Anmerkung: Siehe auch Beispiel 1 − Benutzung von operand2. |
operand3 |
operand3 stellt den Namen
( Wenn Siehe auch Beispiel 2 − Benutzung von operand3. |
operand4 |
operand4 stellt den Wert
( Ist kein Wert vorhanden, wird eine gegebene dynamische Variable auf
Siehe auch Beispiel 3 − Benutzung von operand4. |
operand5 und
operand6
PREFIX |
Der eindeutige Namen gewährleistende Namespace-URI oder Uniform
Resource Identifier (operand5) und das
Namespace-PREFIX (operand6) werden
während der Laufzeit kopiert. Deshalb beeinflusst eine Änderung der Arrays für
Namespace-Zuordnungen in der PARSE -Schleife nicht den Parser.
|
operand5 und operand6 sind eindimensionale Arrays mit einer gleichen Anzahl von Ausprägungen. Namespace-Normalisierung ist eine Funktion des
<myns:myentity xmlns:myns="http://myuri" /> Die Namespace-Definition besteht aus zwei Teilen:
Der Namespace- Bei der Namespace-Normalisierung können alle Namespace-Präfixe auf Standardwerte gesetzt werden, die in der Namespace-Klausel definiert wurden. Der erste Eintrag wird dann benutzt, wenn ein URI mehr als einmal angegeben wird. Wenn mehr als ein Präfix im XML-Dokument benutzt wird, dann wird nur das erste für die Ausgabe berücksichtigt. Der Rest wird ignoriert. Die uri(1) := 'http://namespaces.softwareag.com/natural/demo' pre(1) := 'nat:' Wenn der Namespace in einem XML-Dokument definiert wird, prüft der
Parser, ob dieser Namespace (URI) in der Normalisierungs-Tabelle vorhanden ist.
Das Präfix der Normalisierungs-Tabelle wird für alle Ausgabedaten vom
Siehe auch: |
|
Zusätzliche Informationen zu PREFIX:
Außerdem gilt Folgendes für die Präfix-Definition:
|
Der folgende XML-Code
myxml := '<?xml version="1.0" encoding="ISO-8859-1" ?>'- '<employee personnel-id="30016315" >'- '<full-name>'- '<!--this is just a comment-->'- '<first-name>RICHARD</first-name>'- '<name>FORDHAM</name>'- '</full-name>'- '</employee>'
wird durch folgenden Natural-Code verarbeitet:
PARSE XML myxml INTO PATH mypath PRINT mypath END-PARSE
und erzeugt die folgende Ausgabe:
employee employee/@personnel-id employee/full-name employee/full-name/! employee/full-name/first-name employee/full-name/first-name/$ employee/full-name/first-name// employee/full-name/name employee/full-name/name/$ employee/full-name/name// employee/full-name// employee//
Der folgende XML-Code
myxml := '<?xml version="1.0" encoding="ISO-8859-1" ?>'- '<employee personnel-id="30016315" >'- '<full-name>'- '<!--this is just a comment-->'- '<first-name>RICHARD</first-name>'- '<name>FORDHAM</name>'- '</full-name>'- '</employee>'
wird durch folgenden Natural-Code verarbeitet:
PARSE XML myxml INTO PATH mypath NAME myname DISPLAY (AL=39) mypath myname END-PARSE
und erzeugt die folgende Ausgabe:
MYPATH MYNAME ---------------------------------- ----------------------------------- employee employee employee/@personnel-id personnel-id employee/full-name full-name employee/full-name/! employee/full-name/first-name first-name employee/full-name/first-name/$ employee/full-name/first-name// first-name employee/full-name/name name employee/full-name/name/$ employee/full-name/name// name employee/full-name// full-name employee// employee
Der folgende XML-Code
myxml := '<?xml version="1.0" encoding="ISO-8859-1" ?>'- '<employee personnel-id="30016315" >'- '<full-name>'- '<!--this is just a comment-->'- '<first-name>RICHARD</first-name>'- '<name>FORDHAM</name>'- '</full-name>'- '</employee>'
wird durch folgenden Natural-Code verarbeitet:
PARSE XML myxml INTO PATH mypath VALUE myvalue DISPLAY (AL=39) mypath myvalue END-PARSE
und erzeugt die folgende Ausgabe:
MYPATH MYVALUE ---------------------------------- ----------------------------------- employee employee/@personnel-id 30016315 employee/full-name employee/full-name/! this is just a comment employee/full-name/first-name employee/full-name/first-name/$ RICHARD employee/full-name/first-name// employee/full-name/name employee/full-name/name/$ FORDHAM employee/full-name/name// employee/full-name// employee//
Der folgende XML-Code
myxml := '<?xml version="1.0" encoding="ISO-8859-1" ?>'- '<nat:employee nat:personnel-id="30016315"'- ' xmlns:nat="http://namespaces.softwareag.com/natural/demo">'- '<nat:full-Name>'- '<nat:first-name>RICHARD</nat:first-name>'- '<nat:name>FORDHAM</nat:name>'- '</nat:full-Name>'- '</nat:employee>'
wird durch folgenden Natural-Code verarbeitet:
PARSE XML myxml INTO PATH mypath PRINT mypath END-PARSE
und erzeugt die folgende Ausgabe:
nat:employee nat:employee/@nat:personnel-id nat:employee/@xmlns:nat nat:employee/nat:full-Name nat:employee/nat:full-Name/nat:first-name nat:employee/nat:full-Name/nat:first-name/$ nat:employee/nat:full-Name/nat:first-name// nat:employee/nat:full-Name/nat:name nat:employee/nat:full-Name/nat:name/$ nat:employee/nat:full-Name/nat:name// nat:employee/nat:full-Name// nat:employee//
Wird NORMALIZE
NAMESPACE
verwendet, erzeugt dasselbe XML-Dokument wie in
Beispiel 4 mit einem anderen NAMESPACE PREFIX
genau dieselbe
Ausgabe.
XML-Code:
myxml := '<?xml version="1.0" encoding="ISO-8859-1" ?>'- '<natural:employee natural:personnel-id="30016315"'- ' xmlns:natural="http://namespaces.softwareag.com/natural/demo">'- '<natural:full-Name>'- '<natural:first-name>RICHARD</natural:first-name>'- '<natural:name>FORDHAM</natural:name>'- '</natural:full-Name>'- '</natural:employee>'
Natural-Code:
uri(1) := 'http://namespaces.softwareag.com/natural/demo' pre(1) := 'nat:' * PARSE XML myxml INTO PATH mypath NORMALIZE NAMESPACE uri(*) PREFIX pre(*) PRINT mypath END-PARSE
Ausgabe des obigen Programms
nat:employee nat:employee/@nat:personnel-id nat:employee/@xmlns:nat nat:employee/nat:full-Name nat:employee/nat:full-Name/nat:first-name nat:employee/nat:full-Name/nat:first-name/$ nat:employee/nat:full-Name/nat:first-name// nat:employee/nat:full-Name/nat:name nat:employee/nat:full-Name/nat:name/$ nat:employee/nat:full-Name/nat:name// nat:employee/nat:full-Name// nat:employee//