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) |
このドキュメントでは、次のトピックについて説明します。
構文図で使用されている記号については、「構文記号」を参照してください。
PARSE XML
ステートメントを使用すると、Natural プログラムから XML ドキュメントを解析できるようになります。 『プログラミングガイド』の「インターネットと XML アクセスのステートメント」も参照してください。
スタティック変数の長さを決定することはできないため、PARSE
ステートメントを使用するときはダイナミック変数を使用することをお勧めします。 スタティック変数を使用すると、変数に書き込まれる値が切り捨てられる可能性があります。
Unicode サポートの詳細については、『Unicode およびコードページのサポート』ドキュメントの「PARSE XML
」を参照してください。
(ASCII ベースシステムで)XML ドキュメントの異なるデータタイプを表すためにパス文字列で使用されるマーキングを次に示します。
マーキング | XML データ | パス文字列内の位置 |
---|---|---|
? | 処理命令(<?XML...?> を除く)
|
末尾 |
! | コメント | 末尾 |
C | CDATA セクション | 末尾 |
@ | 属性(メインフレームでは §) | 属性名の前 |
/ | 終了タグまたはパス内の親名セパレータ | 末尾または親名の間 |
$ | 解析したデータ - データ文字列 | 末尾 |
パス文字列でこの追加のマークアップを使用することにより、出力ドキュメントで XML ドキュメントの各種要素をより容易に識別できます。
グローバル名前空間を指定するには、接頭辞 ":" および空の URI を使用してください。
次の Natural システム変数は、発行された PARSE XML
ステートメントごとに自動的に作成されます。
*PARSE-TYPE
、*PARSE-LEVEL
、*PARSE-ROW
、*PARSE-COL
、および *PARSE-NAMESPACE-URI
の後の表記 (r)
は、PARSE
が発行されたステートメントのラベルまたはステートメント番号を示すために使用されます。 (r)
指定がない場合、対応するシステム変数は、アクティブな PARSE
処理ループで現在処理されている XML データのシステム変数を表します。
これらのシステム変数の詳細については、『システム変数』ドキュメントを参照してください。
オペランド定義テーブル:
オペランド | 構文要素 | フォーマット | ステートメント参照 | ダイナミック定義 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
operand1 | C | S | A | U | B | 可 | 不可 | |||||||||||||
operand2 | S | A | U | B | 可 | 可 | ||||||||||||||
operand3 | S | A | U | B | 可 | 可 | ||||||||||||||
operand4 | S | A | U | B | 可 | 可 | ||||||||||||||
operand5 | S | A | A | U | B | 可 | 可 | |||||||||||||
operand6 | S | A | A | U | B | 可 | 可 |
構文要素の説明:
operand1 | operand1 は対象の XML ドキュメントを表します。 XML ドキュメントを解析中に変更することはできません。 解析中に XML ドキュメントを変更(例えば、書き込み)しようとすると、エラーメッセージが表示されます。 |
---|---|
operand2 |
operand2 は XML ドキュメントのデータの
注意: 「例 1 - operand2 の使用」も参照してください。 |
operand3 |
operand3 は XML ドキュメントのデータ要素の
「例 2 - operand3 の使用」も参照してください。 |
operand4 |
operand4 は XML ドキュメントのデータ要素の内容( 値がない場合、所定のダイナミック変数は 「例 3 - operand4 の使用」も参照してください。 |
operand5 およびoperand6
PREFIX |
NAMESPACE URI または URI(operand5)および名前空間 PREFIX (operand6)はランタイム中にコピーされます。 したがって、PARSE XML ループ内の名前空間マッピング配列の修正はパーサに影響しません。
|
operand5 およびoperand6 はオカレンス数の等しい 1 次元配列です。 名前空間正規化は <myns:myentity xmlns:myns="http://myuri" />
名前空間 名前空間正規化では、すべての名前空間
uri(1) := 'http://namespaces.softwareag.com/natural/demo' pre(1) := 'nat:' XML ドキュメント内に 以下の項目も参照してください。 |
|
PREFIX に関する追加情報:
また、接頭辞定義には次の点が適用されます。
|
次のような XML コードがあるとします。
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>'
これは、次の Natural コードで処理されます。
PARSE XML myxml INTO PATH mypath PRINT mypath END-PARSE
次の出力を生成します。
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//
次のような XML コードがあるとします。
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>'
これは、次の Natural コードで処理されます。
PARSE XML myxml INTO PATH mypath NAME myname DISPLAY (AL=39) mypath myname END-PARSE
注意:
次の出力を生成します。
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
次のような XML コードがあるとします。
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>'
これは、次の Natural コードで処理されます。
PARSE XML myxml INTO PATH mypath VALUE myvalue DISPLAY (AL=39) mypath myvalue END-PARSE
次の出力を生成します。
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//
次のような XML コードがあるとします。
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>'
これは、次の Natural コードで処理されます。
PARSE XML myxml INTO PATH mypath PRINT mypath END-PARSE
次の出力を生成します。
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//
NORMALIZE NAMESPACE
を使用すると、例 4 のような NAMESPACE PREFIX
の異なる同じ XML ドキュメントでまったく同じ出力が生成されます。
XML コード:
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 コード:
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
上記プログラムの出力:
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//