首页 > 解决方案 > 从 DB2 中的多个 xml 节点和 xml 属性中检索一个值

问题描述

需要帮助来检索多个 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

标签: db2

解决方案


您的 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.

推荐阅读