2016-06-17 99 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> 
相關問題