如何重命名Oracle XMLTYPE节点

如何重命名Oracle XMLTYPE节点,第1张

概述我在PL / SQL中有一个 XMLType,我需要重命名一些节点和一些值.例如: <root> <fields> <a>foo</a> <b>bar</b> </fields></root> 我想把上面的内容变成这样: <root> <fields> <a>foo</a> <c>baz</c> </fiel 我在PL / sql中有一个 XMLType,我需要重命名一些节点和一些值.例如:

<root>   <fIElds>        <a>foo</a>        <b>bar</b>   </fIElds></root>

我想把上面的内容变成这样:

<root>   <fIElds>        <a>foo</a>        <c>baz</c>   </fIElds></root>

我知道我可以像这样更新值:

SELECT UpdateXML(my_xml,'/root/fIElds/b/text()','baz')  INTO my_xml_updated  FROM DUAL;

结果是:

<root>   <fIElds>        <a>foo</a>        <b>baz</b>   </fIElds></root>

但是如何从< b>更新节点名称?到< c> (不影响节点的内容)?

解决方法 一种选择是使用 XMLTRANSFORM重命名节点.另见例如 Rename nodes with XSLT.

withxmldata as (select xmltype('<root>  <fIElds>    <a>foo</a>    <b>bar</b>  </fIElds></root>') val from dual),stylesheet as (select '<?xml version="1.0"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/transform">  <!-- IDentity transformation -->  <xsl:template match="node()|@*">    <xsl:copy>      <xsl:apply-templates select="node()|@*"/>    </xsl:copy>  </xsl:template>  <!-- IDentity transformation overrIDden for element b -->  <xsl:template match="b">    <xsl:element name="c">      <xsl:apply-templates select="node()|@*"/>    </xsl:element>  </xsl:template></xsl:stylesheet>' val from dual)select xmltransform(x.val,s.val) from xmldata x,stylesheet s;

输出:

XMLtransform(X.VAL,S.VAL)--------------------------------------------------------------------------------<root>  <fIElds>    <a>foo</a>    <c>bar</c>  </fIElds></root>
总结

以上是内存溢出为你收集整理的如何重命名Oracle XMLTYPE节点全部内容,希望文章能够帮你解决如何重命名Oracle XMLTYPE节点所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/1161709.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存