繁体   English   中英

删除多个具有相同名称的xml节点(但不是全部)

[英]Delete multiple xml nodes with same name (but not all)

如何根据其中的数据删除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>

您可以将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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM