如何使用 xml-query 删除多个节点
How to delete more than one node with xml-query
使用此代码,我可以删除此 xml 元素的一个节点 (field_without_interest)。
但我现在想删除两个节点(field_without_interest 和 PERSON_NUMBER)。
我试图将 for 循环放在不同的地方(你可以在代码中看到这一点。但我认为在 Whosebug 中编写每次尝试都没有用)但无济于事。
SELECT XMLQUERY(
'copy $NEWHTML := .
modify (
for $i in $NEWHTML/ROWSET/ROW/field_without_interest
--for $j in $NEWHTML/ROWSET/ROW/PERSON_NUMBER
return delete node $i--, node $j
)
return $NEWHTML'
PASSING xmltype(
'<?xml version="1.0"?>
<ROWSET>
<ROW>
<PERSON_NUMBER>1000142</PERSON_NUMBER>
<LOAN_1>25000</LOAN_1>
<field_without_interest>f</field_without_interest>
</ROW>
<ROW>
<PERSON_NUMBER>1000142</PERSON_NUMBER>
<LOAN_1>25000</LOAN_1>
</ROW>
</ROWSET>'
)
RETURNING CONTENT
).getStringVal() AS interested_elements
FROM DUAL
您可以在 modify
子句中指定要删除的 select 个节点的替代路径:
SELECT XMLQUERY(
'copy $NEWHTML := .
modify (
delete nodes
$NEWHTML/ROWSET/ROW/*[
self::field_without_interest
or self::PERSON_NUMBER
]
)
return $NEWHTML'
PASSING xmltype(
'<?xml version="1.0"?>
<ROWSET>
<ROW>
<PERSON_NUMBER>1000142</PERSON_NUMBER>
<LOAN_1>25000</LOAN_1>
<field_without_interest>f</field_without_interest>
</ROW>
<ROW>
<PERSON_NUMBER>1000142</PERSON_NUMBER>
<LOAN_1>25000</LOAN_1>
</ROW>
</ROWSET>'
)
RETURNING CONTENT
).getStringVal() AS interested_elements
FROM DUAL
| INTERESTED_ELEMENTS |
| :------------------------------------------------------------------------------------------------------- |
| <?xml version="1.0"?><ROWSET><ROW><LOAN_1>25000</LOAN_1></ROW><ROW><LOAN_1>25000</LOAN_1></ROW></ROWSET> |
db<>fiddle here
使用此代码,我可以删除此 xml 元素的一个节点 (field_without_interest)。 但我现在想删除两个节点(field_without_interest 和 PERSON_NUMBER)。 我试图将 for 循环放在不同的地方(你可以在代码中看到这一点。但我认为在 Whosebug 中编写每次尝试都没有用)但无济于事。
SELECT XMLQUERY(
'copy $NEWHTML := .
modify (
for $i in $NEWHTML/ROWSET/ROW/field_without_interest
--for $j in $NEWHTML/ROWSET/ROW/PERSON_NUMBER
return delete node $i--, node $j
)
return $NEWHTML'
PASSING xmltype(
'<?xml version="1.0"?>
<ROWSET>
<ROW>
<PERSON_NUMBER>1000142</PERSON_NUMBER>
<LOAN_1>25000</LOAN_1>
<field_without_interest>f</field_without_interest>
</ROW>
<ROW>
<PERSON_NUMBER>1000142</PERSON_NUMBER>
<LOAN_1>25000</LOAN_1>
</ROW>
</ROWSET>'
)
RETURNING CONTENT
).getStringVal() AS interested_elements
FROM DUAL
您可以在 modify
子句中指定要删除的 select 个节点的替代路径:
SELECT XMLQUERY( 'copy $NEWHTML := . modify ( delete nodes $NEWHTML/ROWSET/ROW/*[ self::field_without_interest or self::PERSON_NUMBER ] ) return $NEWHTML' PASSING xmltype( '<?xml version="1.0"?> <ROWSET> <ROW> <PERSON_NUMBER>1000142</PERSON_NUMBER> <LOAN_1>25000</LOAN_1> <field_without_interest>f</field_without_interest> </ROW> <ROW> <PERSON_NUMBER>1000142</PERSON_NUMBER> <LOAN_1>25000</LOAN_1> </ROW> </ROWSET>' ) RETURNING CONTENT ).getStringVal() AS interested_elements FROM DUAL
| INTERESTED_ELEMENTS | | :------------------------------------------------------------------------------------------------------- | | <?xml version="1.0"?><ROWSET><ROW><LOAN_1>25000</LOAN_1></ROW><ROW><LOAN_1>25000</LOAN_1></ROW></ROWSET> |
db<>fiddle here