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.
Verwandtes Statement: REQUEST
DOCUMENT
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 zur Unicode-Unterstützung siehe
Unicode- und
Codepage-Unterstützung in der Natural-Programmiersprache,
Abschnitt Natural-Statements,
Unterabschnitt
PARSE
XML
in der Unicode- und
Codepage-Unterstützung-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 Quellcode-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:
Syntax-Element | Beschreibung |
---|---|
operand1
|
XML-Dokument: 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
|
Pfad:
operand2 stellt den Pfad der Daten im XML-Dokument dar. Der Pfad ( Anmerkung: Siehe auch Beispiel 1 − Benutzung von operand2. |
operand3
|
Datenelementname:
operand3 stellt den Namen
( Wenn Siehe auch Beispiel 2 − Benutzung von operand3. |
operand4
|
Datenelementname:
operand4 stellt den Inhalt
( Ist kein Wert vorhanden, wird eine gegebene dynamische
Variable auf Siehe auch Beispiel 3 − Benutzung von operand4. |
operand5 und
operand6
|
Namespace URI and Präfix:
Der eindeutige Namen gewährleistende Namespace-URI oder
Uniform Resource Identifier (operand5) und das
Namespace- 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 zum
Präfix:
Außerdem gilt Folgendes für die Präfix-Definition:
|
END-PARSE |
Ende des PARSE
XML-Statements:
Im Structured Mode muss das für Natural reservierte
Schlüsselwort Im Reporting Mode wird das Natural-Statement
|
LOOP |
Der folgende XML-Code
myxml := '<?xml version="1.0" ?>'- '<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" ?>'- '<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" ?>'- '<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" ?>'- '<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" ?>'- '<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//