从 DB2 中的多个 xml 节点和 xml 属性中检索值

Retrieve a value from multiple xml nodes and xml attributes in DB2

需要帮助来检索多个 xml 节点和 xml 属性下的值。下面是 xml 和查询。我正在尝试从 agent2 获取 ID 12945。非常感谢任何帮助。

 <Message>
    <PartyRole xsi:type="isf:Agent1"/>
        <Id>12645</Id>
    </PartyRole>
    <PartyRole xsi:type="isf:Agent2"/>
        <Id>12945</Id>
    </PartyRole>                        
    <PartyRole xsi:type="isf:Agent3">
        <Id>52345</Id>
    </PartyRole>                        
 <Message>

查询: XMLCAST(XMLQUERY('$file/*:Message/*:PartyRole/*:PartyRole[@xsi = "isf:Agent2"]/*:Id' PASSING XMLPARSE(DOCUMENT T1."XML_COLUMN") AS "file") AS CHAR(5)) AS AgentID

您的xml无效!或者您刚刚粘贴了其中的一部分。

您有一个名称空间别名,但未在任何地方定义 xsi。 另外,前两个节点是自闭的,“子节点”挂了...

无论如何。

我试着“猜”一下你的好处是什么xml...如果使用这个:

<Message xmlns:xsi="anything">
    <PartyRole xsi:type="isf:Agent1">
        <Id>12645</Id>
    </PartyRole>
    <PartyRole xsi:type="isf:Agent2">
        <Id>12945</Id>
    </PartyRole>                        
    <PartyRole xsi:type="isf:Agent3">
        <Id>52345</Id>
    </PartyRole>                        
 </Message>

以下查询如您所愿:

with goodxml(cxml) as  ( values xmlparse( document ' <Message xmlns:xsi="anything">
    <PartyRole xsi:type="isf:Agent1">
        <Id>12645</Id>
    </PartyRole>
    <PartyRole xsi:type="isf:Agent2">
        <Id>12945</Id>
    </PartyRole>                        
    <PartyRole xsi:type="isf:Agent3">
        <Id>52345</Id>
    </PartyRole>                        
 </Message>' ) )

SELECT XMLCAST( XMLQUERY('$file/Message/PartyRole[@*:type="isf:Agent2"]/Id' 
                   PASSING CXML AS "file") AS CHAR(5)) AS AgentID 
    FROM goodxml    

AGENTID
-------
12945

  1 record(s) selected.