首页 > 解决方案 > 根据子节点值更新 XML 节点

问题描述

我正在尝试根据兄弟节点更新 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 为 rosy 且 idlist 为 22,23,89”。

任何指针?

标签: xmloracleoracle-sqldevelopernodes

解决方案


对我有用的解决方案是:

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

由于某种原因,当 uname 中有特殊字符时,查询不起作用,但如果该字段只有字母或数字,那么它可以正常工作。


推荐阅读