ネームスペースでフィルタ処理する

XML メッセージにネームスペースのプレフィックスを使用する要素がある場合は、ネームスペース変数を使用して、指定したネームスペースに含まれる要素をその XML で問い合わせることができます。

ネームスペース宣言の構文は次のとおりです。

namespace namespaceVariable[as URIString]

URIString 値は、ネームスペースをユニークに識別する URI です。変数とネームスペース URI を関連付ければ、その変数をネームスペース プレフィックスを使用するように使用できます。ネームスペース変数を使用するための構文は、以下の 2 つのバリエーションのいずれかです。最初の構文では . 演算子を使用して階層内の要素を区切り、2 番目の構文では角括弧を使用します。

value = namespaceVariable::elementName1.namespaceVariable::elementName2;

value = ["namespace:elementName1"]["namespace:elementName2"];

2 番目の構文は、要素名がスクリプトのキーワード(ifreturn など)と衝突するような場合に特に便利です。 そのような衝突の解決策の詳細については、「 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");

関連トピック

. 演算子で要素の子にアクセスする