XML 要素の内容の取得または設定
要素の内容にアクセスするには、以下のスキーマ依存パスのいずれかを使用します。また、これらのパスは、より複雑なスキーマ依存パスを作成する場合にも使用します (これについては、後の項で説明します)。
構文 |
参照先 |
element_name |
指定された要素の内容。element_name は、ルート要素の子である必要があります。 |
parent.element_name |
指定された要素の内容。parent は、要素への完全パス (つまり、このテーブルに示す任意の構文) です。この場合、element_name は、parent によって参照される要素の子となります。 |
parent.element_name(n) |
指定された親に含まれる、element_name という名前の n 番目の要素の内容。 |
parent.element_name(-) |
指定された親に含まれる、element_name という名前の最後の要素の内容。 |
以下の XML ドキュメントについて考えてみましょう。
<?xml version="1.0" ?>
<Patient MRN='000111222' xmlns='http://myapp.com'>
<Name>Georgina Hampton</Name>
<FavoriteColors>
<FavoriteColor>Red</FavoriteColor>
<FavoriteColor>Green</FavoriteColor>
</FavoriteColors>
<Address>
<Street>86 Bateson Way</Street>
<City>Fall River</City>
</Address>
<Doctor>
<Name>Dr. Randolph</Name>
</Doctor>
</Patient>
以下のテーブルに、このドキュメントのパスの例をいくつか示します。
パスの例 |
現在のパスの値 |
名前 |
Georgina Hampton |
FavoriteColors(1) |
Red |
FavoriteColors(2) |
Green |
FavoriteColors(-) |
Green |
Address |
86 Bateson WayFall River |
Address.Street |
86 Bateson Way |
Doctor |
Dr. Randolph |
スキーマ依存パス設定時の混合コンテンツの使用
要素とテキスト・ノードの両方を含む値へのパスを設定できます。以下に例を示します。
set mixed="SOME TEXT<HOMETOWN>BELMONT</HOMETOWN>"
set status=target.SetValueAt(mixed,"Address")
要素とテキスト・ノードの組み合わせは、混合コンテンツと呼ばれます。
スキーマ依存パスの場合、InterSystems IRIS は、左山括弧 (<) 文字に続いて以下の文字セットのいずれかを含んでいる場合に、値が混合コンテンツであると判断します。
-
スラッシュと右山括弧 (/>)
-
左山括弧とスラッシュ (</)
次のテーブルは、InterSystems IRIS が各種スキーマ依存パスの混合コンテンツを処理する方法を示しています。
パスの参照先 |
InterSystems IRIS が混合コンテンツを処理する方法 |
要素またはコメント |
InterSystems IRIS は、要素またはコメントの現在のコンテンツを特定の混合コンテンツに置き換えます。 |
属性 |
サポート対象外 |
DOM スタイル・パスの混合コンテンツの詳細は、"DOM スタイル・パス設定時の混合コンテンツの使用" を参照してください。
ターミナルでのスキーマ依存パスのテスト
特に、構文に精通している場合は、仮想ドキュメント・プロパティ・パスをビジネス・プロセスやデータ変換などで使用する前にターミナルでテストできると便利です。スキーマ依存 XML パスに対してこれを行うには、次の手順を実行します。
-
対応する 1 つまたは複数の XML スキーマを InterSystems IRIS にロードします。そのためには、“利用可能なツール” の章の説明に従って、[XML スキーマ構造] ページを使用します。
-
管理ポータルを使用して、テストするドキュメントのルート要素に関する DocType 値を探します。以下に例を示します。
前述した “XML 仮想ドキュメントのパス・ユニットの表示” を参照してください。
-
ターミナルまたはテスト・コード内:
-
適切な XML ドキュメントのテキストを含む文字列を作成します。
-
EnsLib.EDI.XML.DocumentOpens in a new tab の ImportFromString() メソッドを使用してこの文字列から XML 仮想ドキュメントのインスタンスを作成します。
-
このインスタンスの DocType プロパティを設定します。
-
このインスタンスの GetValueAt() および SetValueAt() メソッドを使用します。
下のメソッドはステップ 3 を実行します。
ClassMethod TestSchemaPath()
{
set string="<Patient xmlns='http://myapp.com'>"
_"<Name>Jack Brown</Name>"
_"<Address><Street>233 Main St</Street></Address>"
_"</Patient>"
set target=##class(EnsLib.EDI.XML.Document).ImportFromString(string,.status)
if 'status {do $system.Status.DisplayError(status) quit}
//Use the DocType displayed in the Management Portal
set target.DocType="MyApp:Patient"
set pathvalue=target.GetValueAt("Address.Street",,.status)
if 'status {do $system.Status.DisplayError(status) quit}
write pathvalue
}
このメソッドの出力を以下に示します。
SAMPLES>d ##class(Demo.CheckPaths).TestSchemaPath()
233 Main St
GetValueAt() のその他のオプションは、後述する “pFormat 引数” を参照してください。