[英]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.