2016-06-17 97 views
0

如何根据其中的数据删除xml节点。删除多个具有相同名称(但不是全部)的xml节点

例如,如果在下面,我想只删除这两个

 <MMGroupID>143</MMGroupID> 
    <MMGroupID>70</MMGroupID> 

<Promotion> 
<LastUpdated>2012-08-03T12:15:24+01:00</LastUpdated> 
<MajorVersion>1</MajorVersion> 
<MinorVersion>7</MinorVersion> 
<MultibuyGroup> 
    <XMLSchemaVersion>1</XMLSchemaVersion> 
    <UseLowestNetValue>0</UseLowestNetValue> 
    <MMGroupID>975</MMGroupID> 
    <MMGroupID>41</MMGroupID> 
    <MMGroupID>143</MMGroupID> 
    <MMGroupID>70</MMGroupID> 
    <MMGroupID>36</MMGroupID> 
    <MMGroupID>22</MMGroupID> 
    <MMGroupID>870</MMGroupID> 
    <MMGroupID>90</MMGroupID> 
    <MMGroupID>88</MMGroupID> 
    <MMGroupID>142</MMGroupID> 
    <MMGroupID>147</MMGroupID> 
    <TriggerOnLostSales>0</TriggerOnLostSales> 
</MultibuyGroup> 

回答

0

您可以使用deleteXML()与指定你想要的节点值的XPath:

deleteXml(<your_xml>, q'{//MMGroupID[text()='143' or text()='70']}') 

演示:

select XMLSerialize(document 
    deleteXML(XMLType(
'<Promotion> 
<LastUpdated>2012-08-03T12:15:24+01:00</LastUpdated> 
<MajorVersion>1</MajorVersion> 
<MinorVersion>7</MinorVersion> 
<MultibuyGroup> 
    <XMLSchemaVersion>1</XMLSchemaVersion> 
    <UseLowestNetValue>0</UseLowestNetValue> 
    <MMGroupID>975</MMGroupID> 
    <MMGroupID>41</MMGroupID> 
    <MMGroupID>143</MMGroupID> 
    <MMGroupID>70</MMGroupID> 
    <MMGroupID>36</MMGroupID> 
    <MMGroupID>22</MMGroupID> 
    <MMGroupID>870</MMGroupID> 
    <MMGroupID>90</MMGroupID> 
    <MMGroupID>88</MMGroupID> 
    <MMGroupID>142</MMGroupID> 
    <MMGroupID>147</MMGroupID> 
    <TriggerOnLostSales>0</TriggerOnLostSales> 
</MultibuyGroup> 
</Promotion>'), 
    q'{//MMGroupID[text()='143' or text()='70']}') 
    as CLOB INDENT size = 2) 
from dual; 

其中产生:

XMLSERIALIZE(DOCUMENTDELETEXML(XMLTYPE('<PROMOTION><LASTUPDATED>2012-08-03T12:15 
-------------------------------------------------------------------------------- 
<Promotion> 
    <LastUpdated>2012-08-03T12:15:24+01:00</LastUpdated> 
    <MajorVersion>1</MajorVersion> 
    <MinorVersion>7</MinorVersion> 
    <MultibuyGroup> 
    <XMLSchemaVersion>1</XMLSchemaVersion> 
    <UseLowestNetValue>0</UseLowestNetValue> 
    <MMGroupID>975</MMGroupID> 
    <MMGroupID>41</MMGroupID> 
    <MMGroupID>36</MMGroupID> 
    <MMGroupID>22</MMGroupID> 
    <MMGroupID>870</MMGroupID> 
    <MMGroupID>90</MMGroupID> 
    <MMGroupID>88</MMGroupID> 
    <MMGroupID>142</MMGroupID> 
    <MMGroupID>147</MMGroupID> 
    <TriggerOnLostSales>0</TriggerOnLostSales> 
    </MultibuyGroup> 
</Promotion> 
相关问题