加入收藏 | 设为首页 | 会员中心 | 我要投稿 上饶站长网 (https://www.0793zz.com.cn/)- 数据库平台、视觉智能、智能搜索、决策智能、迁移!
当前位置: 首页 > 站长百科 > 正文

如何重命名Oracle XMLTYPE节点

发布时间:2021-01-13 13:08:52 所属栏目:站长百科 来源:网络整理
导读:我在PL / SQL中有一个 XMLType,我需要重命名一些节点和一些值.例如: root fields afoo/a bbar/b /fields/root 我想把上面的内容变成这样: root fields afoo/a cbaz/c /fields/root 我知道我可以像这样更新值: SELECT UpdateXML(my_xml,'/root/fields/b/te

我在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.

with
xmldata 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>

(编辑:上饶站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读