将 xml 中出现多处的一个子节点值替换为
replacing the one child node value which is occurred multiple places with in the xml
需要将子节点 的值 'OBLIGEE ATTORNEY' 和 'saravanan' 替换为值 'EDWIN CHAND'。提前致谢
这是查询:
SELECT XMLQUERY ( 'copy $new := $d1
modify (do replace value of $new/root//var[@name=$element_name] with $d)
return $new'
PASSING xmlparse(document '<root>
<first>
<var name="user_input_attn_obligee_desc">OBLIGEE ATTORNEY</var>
</first>
<second>
<var name="user_input_attn_obligee_desc">saravanan</var>
</second>
<user_input_attn_obligor_desc>OBLIGOR ATTORNEY</user_input_attn_obligor_desc>
</root>') AS "d1",
'EDWIN CHAND' AS "d",
'user_input_attn_obligee_desc'AS "element_name") FROM SYSIBM.SYSDUMMY1;
需要输出:
'<root>
<first>
<var name="user_input_attn_obligee_desc">EDWIN CHAND</var>
</first>
<second>
<var name="user_input_attn_obligee_desc">EDWIN CHAND</var>
</second>
<user_input_attn_obligor_desc>OBLIGOR ATTORNEY</user_input_attn_obligor_desc>
</root>'
但是它抛出如下错误(如果xml只有一个节点那么它工作正常)。
错误 [10703] [IBM][DB2/LINUXX8664] SQL16085N XQuery“替换值”表达式的目标节点无效。错误 QName=err: "XUTY0008".
SQL16085N, QName = err:XUTY0008
err:XUTY0008
The value of expression-type is "replace" or "replace value of" and the target node of a replace expression does not qualify any node, qualifies a sequence of two or more nodes, or qualifies a document node. It must qualify exactly one node that is not a document node.
如果文档中有多个节点,则必须遍历节点。
请改用以下内容:
SELECT
XMLQUERY
('
transform
copy $new := $d1
modify
for $xnode in $new/root//var[@name=$element_name]
return do replace value of $xnode with $d
return $new
'
PASSING xmlparse
(document
'
<root>
<first>
<var name="user_input_attn_obligee_desc">OBLIGEE ATTORNEY</var>
</first>
<second>
<var name="user_input_attn_obligee_desc">saravanan</var>
</second>
<user_input_attn_obligor_desc>OBLIGOR ATTORNEY</user_input_attn_obligor_desc>
</root>
'
) AS "d1"
, 'EDWIN CHAND' AS "d"
, 'user_input_attn_obligee_desc' AS "element_name"
)
FROM SYSIBM.SYSDUMMY1;
需要将子节点
SELECT XMLQUERY ( 'copy $new := $d1
modify (do replace value of $new/root//var[@name=$element_name] with $d)
return $new'
PASSING xmlparse(document '<root>
<first>
<var name="user_input_attn_obligee_desc">OBLIGEE ATTORNEY</var>
</first>
<second>
<var name="user_input_attn_obligee_desc">saravanan</var>
</second>
<user_input_attn_obligor_desc>OBLIGOR ATTORNEY</user_input_attn_obligor_desc>
</root>') AS "d1",
'EDWIN CHAND' AS "d",
'user_input_attn_obligee_desc'AS "element_name") FROM SYSIBM.SYSDUMMY1;
需要输出:
'<root>
<first>
<var name="user_input_attn_obligee_desc">EDWIN CHAND</var>
</first>
<second>
<var name="user_input_attn_obligee_desc">EDWIN CHAND</var>
</second>
<user_input_attn_obligor_desc>OBLIGOR ATTORNEY</user_input_attn_obligor_desc>
</root>'
但是它抛出如下错误(如果xml只有一个
SQL16085N, QName = err:XUTY0008
err:XUTY0008
The value of expression-type is "replace" or "replace value of" and the target node of a replace expression does not qualify any node, qualifies a sequence of two or more nodes, or qualifies a document node. It must qualify exactly one node that is not a document node.
如果文档中有多个节点,则必须遍历节点。
请改用以下内容:
SELECT
XMLQUERY
('
transform
copy $new := $d1
modify
for $xnode in $new/root//var[@name=$element_name]
return do replace value of $xnode with $d
return $new
'
PASSING xmlparse
(document
'
<root>
<first>
<var name="user_input_attn_obligee_desc">OBLIGEE ATTORNEY</var>
</first>
<second>
<var name="user_input_attn_obligee_desc">saravanan</var>
</second>
<user_input_attn_obligor_desc>OBLIGOR ATTORNEY</user_input_attn_obligor_desc>
</root>
'
) AS "d1"
, 'EDWIN CHAND' AS "d"
, 'user_input_attn_obligee_desc' AS "element_name"
)
FROM SYSIBM.SYSDUMMY1;