微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

删除具有特定CDATA的xml节点

如何解决删除具有特定CDATA的xml节点

这是我的XML的一部分:

 <EO Name="oracle.apps.hcm.goals.core.publicModel.entity.GoalMeasurementEO">    
                    <![CDATA[0001FFFFFFFF]]>    
                    <GoalMeasurementEORow PS="0" Hdl="16" PK="Y" CI="Y" AV="111111111111111111111111111111">    
                       <MeasurementId>  
                          <DATA null="true"/>   
                       </MeasurementId> 
                    </GoalMeasurementEORow> 
                 </EO>  
    <EO Name="oracle.apps.hcm.goals.core.publicModel.entity.GoalMeasurementEO"> 
                    <![CDATA[00010000000EACED00057708000110D943311B2F]]>    
                    <GoalMeasurementEORow PS="0" Hdl="1019" PK="Y" CI="Y" AV="">    
                       <MeasurementId>  
                          <DATA>300000297949999</DATA>  
                       </MeasurementId> 
                       <BusinessGroupId>    
                          <DATA>1</DATA>    
                       </BusinessGroupId>   
                     </EO>

我需要使用Oracle在整个表中使用<![CDATA[0001FFFFFFFF]]>删除EO节点。此xml存储在XMLTYPE的XM_DATA_CACHE中。 有没有一种基于CDATA删除方法

最终输出应为

<EO Name="oracle.apps.hcm.goals.core.publicModel.entity.GoalMeasurementEO"> 
                    <![CDATA[0001FFFFFFFF]]>    
                    <GoalMeasurementEORow PS="0" Hdl="16" PK="Y" CI="Y" AV="111111111111111111111111111111">    
                       <MeasurementId>  
                          <DATA null="true"/>   
                       </MeasurementId> 
                    </GoalMeasurementEORow> 
                 </EO>  ```

解决方法

首先您的xml损坏:第二个标签GoalMeasurementEORow没有关闭,并且由于它只是xml的一部分,因此它没有根标签。

无论如何,我已经修复了您的XML,以显示如何从XML中删除cdata

请查看以下示例:

-- sample data:
with t(x) as (
select xmltype(q'{
<ROOT>
<EO Name="oracle.apps.hcm.goals.core.publicModel.entity.GoalMeasurementEO">    
                    <![CDATA[0001FFFFFFFF]]>    
                    <GoalMeasurementEORow PS="0" Hdl="16" PK="Y" CI="Y" AV="111111111111111111111111111111">    
                       <MeasurementId>  
                          <DATA null="true"/>   
                       </MeasurementId> 
                    </GoalMeasurementEORow> 
                 </EO>  
    <EO Name="oracle.apps.hcm.goals.core.publicModel.entity.GoalMeasurementEO"> 
                    <![CDATA[00010000000EACED00057708000110D943311B2F]]>    
                    <GoalMeasurementEORow PS="0" Hdl="1019" PK="Y" CI="Y" AV="">    
                       <MeasurementId>  
                          <DATA>300000297949999</DATA>  
                       </MeasurementId> 
                       <BusinessGroupId>    
                          <DATA>1</DATA>    
                       </BusinessGroupId>
                       </GoalMeasurementEORow>
                     </EO>
</ROOT>
}')
from dual)-- end of sample data
-- main query:
select
  XMLQuery(
        'copy $i := $p1 modify
            (for $j in $i//EO
              let $o := <EO >{$j/@*}{ $j/node()[name() ne ""]}</EO>
                return replace node $j with $o
                )
        return $i' 
        PASSING t.x AS "p1"
        returning content
        ) xdata_new
from t;

结果:

XDATA_NEW
----------------------------------------------------------------------------------
<ROOT>
  <EO Name="oracle.apps.hcm.goals.core.publicModel.entity.GoalMeasurementEO">
    <GoalMeasurementEORow PS="0" Hdl="16" PK="Y" CI="Y" AV="111111111111111111111111111111">
      <MeasurementId>
        <DATA null="true"/>
      </MeasurementId>
    </GoalMeasurementEORow>
  </EO>
  <EO Name="oracle.apps.hcm.goals.core.publicModel.entity.GoalMeasurementEO">
    <GoalMeasurementEORow PS="0" Hdl="1019" PK="Y" CI="Y" AV="">
      <MeasurementId>
        <DATA>300000297949999</DATA>
      </MeasurementId>
      <BusinessGroupId>
        <DATA>1</DATA>
      </BusinessGroupId>
    </GoalMeasurementEORow>
  </EO>
</ROOT>

如您所见,我用其内容替换了所有子节点EO,CDATA消失了。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。