ネームスペースでフィルタ処理する
XML メッセージにネームスペースのプレフィックスを使用する要素がある場合は、ネームスペース変数を使用して、指定したネームスペースに含まれる要素をその XML で問い合わせることができます。
ネームスペース宣言の構文は次のとおりです。
namespace namespaceVariable[as URIString]
URIString 値は、ネームスペースをユニークに識別する URI です。変数とネームスペース URI を関連付ければ、その変数をネームスペース プレフィックスを使用するように使用できます。ネームスペース変数を使用するための構文は、以下の 2 つのバリエーションのいずれかです。最初の構文では . 演算子を使用して階層内の要素を区切り、2 番目の構文では角括弧を使用します。
value = namespaceVariable::elementName1.namespaceVariable::elementName2;
value = ["namespace:elementName1"]["namespace:elementName2"];
2 番目の構文は、要素名がスクリプトのキーワード(if や return など)と衝突するような場合に特に便利です。 そのような衝突の解決策の詳細については、「 XML マップとスクリプトに関する考慮事項」を参照してください。
次の例では、ネームスペース「http://openuri.org/」が myco 変数と関連付けらます。
/* Declare an XML variable with a literal XML value. */ var xmlEmps = <employeeData> <inc:employees xmlns:inc="http://openuri.org/"> <inc:employee inc:id="111111111"> <inc:name>John</inc:name> <inc:age>25</inc:age> </inc:employee> </inc:employees> </employeeData>; /* Declare a namespace variable to represent the namespace whose prefix is "inc". */ namespace myco as "http://openuri.org/"; /* Create a new variable to hold the <employee> node containing John. * Access the attributed elements by using the namespace variable in double-colons in place of the * prefix-colon combination used in the XML literal above. */ var xmlName = xmlEmps.employeeData.myco::employees.myco::employee[0];
ネームスペース付きの属性へのアクセスは少し仕組みが異なります。属性へのアクセスで通常行うような .@ 演算子を使用するのではなく、attribute メソッドを使用します。つまり、例の inc:id 属性にアクセスする場合、.@inc::id を使用するのではなく次のようにしてアクセスします。
/* Create a new variable to hold the <employee> node containing John. */ var xmlName = xmlEmps.employeeData.myco::employees.myco::employee.attribute("inc:id");