根据子节点值更新XML节点

时间:2019-10-16 21:14:32

标签: xml oracle oracle-sqldeveloper nodes

我正在尝试基于同级节点更新XML标签的值。

我的XML如下:

<root>
 <mydata>

  <submission>
   <uname>rosy</uname>
   <idlist>22,23,89</idlist>
   <status>unavailable</status>
   <oldstatus>unavailable</oldstatus>
   </submission>

   <submission>
   <uname>amy</uname>
   <idlist>22,23,89</idlist>
   <status>unavailable</status>
   <oldstatus>unavailable</oldstatus>
   </submission>

   <submission>
   <uname>rosy</uname>
   <idlist>66</idlist>
   <status>unavailable</status>
   <oldstatus>unavailable</oldstatus>
  </submission>

 </mydata>
</root>

我有一个查询,可用于基于一个参数更新节点。

UPDATE MYTABLE
         SET MY_DATA =
                UPDATEXML (
                   MY_DATA ,
                      '/root/mydata/submission[idlist=''22,23,89'']/status/text()',
                   'paid', 
                      '/root/mydata/submission[idlist=''22,23,89'']/oldstatus/text()',
                   SYSDATE
                   )
       WHERE ROW_ID = 1234;

也就是说,当前我可以基于“ uname”或“ idlist”查找节点。但是我看不到如何一起基于两个参数进行更新。

这是“将状态更新为已批准的状态,其中uname玫瑰色,idlist为22、23、89”。

任何指针吗?

1 个答案:

答案 0 :(得分:0)

对我有用的解决方案是:

SET MY_DATA = UPDATEXML(MY_DATA, '/ root / mydata / submission [idlist =''22,23,89''and uname =“''rosy''] / status / text()', “付费”)

由于某些原因,当uname中包含特殊字符时,该查询将不起作用,但是如果该字段仅包含字母或数字,则可以正常工作。

相关问题