2013-04-11 78 views
1

如何使用PL/SQL从xmltype中删除节点?例如:删除PL/SQL中的xml节点

<people> 
    <person> 
     <personNO>1</personNO> 
    </person> 
    <person> 
     <personNO>2</personNO> 
    </person> 
</people> 

我尝试删除整个节点的人,如果/人/人/ personNO为1。我的XML文档中l_xml的XMLType变量。到目前为止,我得到了:

SELECT deletexml(l_xml, '/people/person[personNO="1"]') 
INTO l_xml 
FROM dual; 

它似乎并没有工作。你可以请建议任何解决方案?

回答

4

定义“不工作的时候”,因为它会工作得很好:

SQL> declare 
    2 l_xml xmltype; 
    3 begin 
    4 
    5 l_xml := xmltype.createXML('<people> 
    6  <person> 
    7  <personNO>1</personNO> 
    8  </person> 
    9  <person> 
10  <personNO>2</personNO> 
11  </person> 
12 </people>'); 
13 
14 select deletexml(l_xml, '/people/person[personNO="1"]') 
15  into l_xml 
16  from dual; 
17 
18 dbms_output.put_line(l_xml.getstringval()); 
19 end; 
20/
<people><person><personNO>2</personNO></person></people> 

PL/SQL procedure successfully completed. 

(上10.2.0.4 + 11.2.0.3测试)所以对人整个人节点没有= 1被删除。如果你打算清除每个节点,如果personNO 1中存在任何节点,那么你想设置xpath为/people/person[../person/personNO="1"]

+0

这很奇怪,因为“完全不工作”,我的意思是“完全没有任何事情”。对我而言,那段代码没有给出所需的输出。 – Jandrejc 2013-04-11 14:47:33

+0

@Jandrejc - 没有给出期望的输出,或者不给出任何输出?你有服务器输出打开,所以你看到'dbms_output'? (在SQL * Plus中'set serveroutput on') – 2013-04-11 14:54:10

+0

没有给出所需的输出。它给了我原来的xml,其中应该删除的节点。 – Jandrejc 2013-04-11 14:56:24