我有一个XMLTYPE,其中包含3个同名的标记元素。我想替换';'用'。'在最后一个。像这样:
SELECT XMLQUERY (
'copy $tmp := . modify
(for $i in $tmp/root/test/text()
return replace value of node $i
with ''.'')
return $tmp'
PASSING XMLTYPE (
'<root><test>asdasdsada;</test><test>lkjasdhalskdjhlakjsdh;</test><test>tirari;</test></root>')
RETURNING CONTENT)
FROM DUAL
我的结果应该是这样的;
<root><test>asdasdsada;</test><test>lkjasdhalskdjhlakjsdh;</test><test>tirari.</test></root>
由于
答案 0 :(得分:1)
目前您正在修改所有test
个节点,而您正在用句点完全替换内容。根据您的预期输出而不是您想要的。
您可以将test
个节点的数量计入变量,然后使用[postition()=$n]
仅将替换应用于最终节点。然后,您可以使用replace()
或translate()
功能仅将;
更改为.
,而不是替换节点的整个文本内容:
SELECT XMLQUERY (
'copy $tmp := . modify
(let $n := count($tmp/root/test)
for $i in $tmp/root/test[position()=$n]/text()
return replace value of node $i with replace($i, ";", "."))
return $tmp'
PASSING XMLTYPE (
'<root><test>asdasdsada;</test><test>lkjasdhalskdjhlakjsdh;</test><test>tirari;</test></root>')
RETURNING CONTENT) AS RESULT
FROM DUAL;
RESULT
------------------------------------------------------------------------------------------------------------------------
<root><test>asdasdsada;</test><test>lkjasdhalskdjhlakjsdh;</test><test>tirari.</test></root>