簡體   English   中英

刪除具有特定 CDATA 的 xml 節點

[英]Delete xml node with a specific CDATA

這是我的 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 消失了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM