1

Soap 本体内にさまざまなネストされたノードを含む Soap メッセージがあります。ノード「xyz」を見つける必要がありますが、常に同じ場所にあるとは限りません。XSLT の世界では、//xyz[1] を使用できます。esql に相当する構文はありますか? OutputRoot.SOAP.Body{不明な構文}.xyz[1] のようなもの

4

3 に答える 3

2

ESQL の xpath '//' 構文に相当するものはないと思います。値にアクセスするためにそれを使用する必要がある場合は、JavaCompute ノードを使用できます (evaluateXpath を参照)。または、ESQL で再帰関数を作成して、すべてのノードにアクセスし、名前をテストすることもできます。例については、Infocenter の CREATE FUNCTION の記事を参照してください。

于 2014-04-17T22:38:23.290 に答える
1

階層的に常に同じレベルにある場合は、匿名参照を使用できます。

次のコードを使用して、XML の Xyz 値を取得しました。

-- Walk all the second level aggregates looking for any that contain the Xyz tag
DECLARE AnonRef REFERENCE TO InputRoot.XMLNSC.*:HasAggregatesWithXyz.*:*[1];
WHILE(LASTMOVE(AnonRef)) DO
    DECLARE XyzRef REFERENCE TO AnonRef.*:Xyz[1];
    IF(LASTMOVE(XyzRef)) THEN
        -- Do something with the value of Xyz
        DECLARE CharVal CHAR FIELDVALUE(XyzRef);
    END IF;

    MOVE AnonRef NEXTSIBLING;
END WHILE;

<HasAggregatesWithXyz>
    <Agg1><NotXyz>NotNot</NotXyz></Agg1>
    <Agg2><Xyz>XyzValue1</Xyz></Agg2>
    <Agg3><NotXyz>NotNot</NotXyz></Agg3>
    <Agg4><Xyz>XyzValue2</Xyz></Agg4>
</HasAggregatesWithXyz>

注: 選択した XMLNSC 解析オプション、特に空白の保持に関係するものによっては、参照をより具体的にしたい場合があります。そのために、次のように型を使用できます。

DECLARE AnonRef REFERENCE TO InputRoot.XMLNSC.*:HasAggregatesWithXyz.(XMLNSC.Folder)*:*[1];
....
MOVE AnonRef NEXTSIBLING REPEAT TYPE;
于 2014-05-02T04:47:32.203 に答える