ESQL-> 如何使用 SELECT 语句从输入 XMLNSC 中检索值?

ESQL-> How to use SELECT statement to retrieve value from input XMLNSC?

提问人:Loopinfility 提问时间:9/29/2021 最后编辑:rhavelkaLoopinfility 更新时间:1/4/2022 访问量:1011

问:

我需要根据其名称访问特定的 XMLNSC 值。我有一个输入xmlnsc,看起来像这样

<Message>
    <Tags>
        <Name>ev1</Name>
       <Length>004</Length>
       <Value>0050</Value>
    </Tags>
</Message>

我正在尝试使用元素访问元素。这是我的说法,但我认为是不正确的。<Value><Name>

SET OutputRoot.JSON.Data.records[i].userId = THE (SELECT ITEM FIELDVALUE (InputRoot.XMLNSC.Message.Tags.Value)
            FROM InputRoot.XMLNSC.Message.Tags
            WHERE InputRoot.XMLNSC.Message.Tags.Name = 'ev1');

我想知道在ESQL中实现此目的的正确方法是什么。提前致谢!

xml 选择 ibm-integration-bus extended-sql

评论

0赞 kimbert 9/29/2021
你的一般方法是正确的。我建议您简化场景,并使用用户跟踪来查看 ESQL 的执行方式。

答:

3赞 kimbert 9/29/2021 #1

我想我发现了你的错误。FROM 子句中需要 []。 这可能有效(未测试):

SET OutputRoot.JSON.Data.records[i].userId = THE (
        SELECT ITEM FIELDVALUE (tag.Value)
        FROM InputRoot.XMLNSC.Message.Tags[] AS tag
        WHERE tag.Name = 'ev1'
    );
0赞 Iván Sánchez 1/4/2022 #2

对于简单的类型,例如字符,您只需要 THE 和 ITEM,我建议您这样做:

SET OutputRoot.JSON.Data.records[i].userId = THE(SELECT ITEM P.Value FROM InputRoot.XMLNSC.Message.Tags[] AS P 
            WHERE P.Name = 'ev1');

如果存在,这将返回“Value”的值,而不是 ROW。所以检查一下。

评论

0赞 kimbert 2/2/2022
不确定您的陈述是否 100% 正确。THE 和 ITEM 都与 LIST 值相关。允许 LIST 包含复杂成员。也许您的意思是在选择简单类型时通常使用 THE 和 ITEM......但那不是你说的。
0赞 Iván Sánchez 2/3/2022
好吧,在 IBM 文档中说“ITEM 与标量表达式和 THE 函数结合使用,它可以用来创建返回单个标量值的 SELECT 查询”。就是这样。
0赞 kimbert 2/4/2022
是的,我可以看到混乱出现的地方。我认为这句话是在描述THE的一种可能用法。通常,THE 函数可以在任何列表上使用。