如何重命名 Oracle XMLTYPE 节点

2023-12-12

我在 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> to <c>(不影响节点的内容)?


一种选择是使用XML转换重命名节点。另请参见例如使用 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;

Output:

XMLTRANSFORM(X.VAL,S.VAL)
--------------------------------------------------------------------------------
<root>
  <fields>
    <a>foo</a>
    <c>bar</c>
  </fields>
</root>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何重命名 Oracle XMLTYPE 节点 的相关文章

随机推荐

  • Android Studio 0.8.1:导入的项目,缺少根文件夹

    我将 Eclipse 项目导入到 Android Studio 导入成功 但根项目文件夹未显示在 项目 选项卡中 仅嵌套模块可见 如何使项目的根文件夹出现在模块顶部 附 我调查了android studio 新项目缺少文件夹但该解决方案对我
  • 模拟 Apache Camel 在 JUnit 测试中的位置

    我试图嘲笑in and outCamel Routes 的路径 但我不知道如何提供模拟进出路径 请帮我解决这个问题 提前致谢 应用程序属性 inputFilePath src main resources in outputFilePath
  • SQL WHERE 子句是否短路评估?

    SQL WHERE 子句中是否有布尔表达式短路评估 例如 SELECT FROM Table t WHERE key IS NULL OR key IS NOT NULL AND key t Key If key IS NULL评估为tru
  • 在位级别上读取字符

    我希望能够从键盘输入一个字符 并以 00000001 的格式显示该键的二进制代码 此外 我还想以一种允许我输出它们是真还是假的方式读取这些位 e g 01010101 false true false true false true fal
  • jQuery DataTables rowReorder 问题

    我正在使用 DataTables 和 rowReorder 插件来对抗静态表 非 AJAX 一切初始化都很好 但是当我拖动一行时 当它在表中移动时 当我放下它时 它会返回到其原始位置而不刷新 即它从未真正移动过位置 我知道我需要通过 AJA
  • 增加Asp.Net core中上传文件的大小

    目前 我正在使用 Asp Net Core 和 MVC6 需要上传文件大小不受限制 我已经搜索了它的解决方案 但仍然没有得到实际的答案 我已经尝试过这个链接 如果有人有任何想法请帮忙 Thanks 其他答案解决了IIS限制 然而 截至ASP
  • 使用 dompdf 在 pdf 上显示 INR 货币符号

    我正在使用 dompdf 创建 pdf 当我经过时 8377 pdf 将其转换为 如何使用 dompdf 在 pdf 中显示印度货币符号 dompdf 中的核心 PDF 字体 Helvetica Times Roman Courier 仅支
  • 错误:缺少类属性转换

    Error Missing class properties transform Test js export class Test extends Component constructor props super props stati
  • Android:触摸外部时如何关闭 DatePicker DialogFragment?

    我有一个扩展 DialogFragment 的工作 DatePickerFragment 我在 onCreateDialog 中设置了一个 DatePickerDialog 然后尝试添加 picker setCanceledOnTouchO
  • 从 Windows 禁用打印屏幕键盘选项

    有什么办法可以禁用打印屏幕键盘上的按钮 当然不会破坏它的键 我使用的是Windows 7 我需要它是因为提高了少数员工使用的数据库的安全性 如果您操作扫描码映射注册表项 则可以禁用任何键 可以找到一个包含设置说明的小教程here 扫描码图更
  • Crystal Reports 中的条件组 SUM

    我一直在做一些会计报告 并使用公式总结我的不同货币 IE 加拿大委员会公式 if myData 1 CurrencyType CDN then myData 1 Commission else 0 加拿大佣金总额 SUM CanadianC
  • 如何更改分屏 emacs 窗口的大小?

    我将 emacs 水平分割 在顶部我正在编辑 Perl 代码 底部是 shell 默认情况下 emacs 使两个窗口大小相等 但我希望 shell 缓冲区更小 也许是一半大小 我想知道我怎样才能做到这一点 使用鼠标 您可以拖动窗口大小 单击
  • 在java中将word文件另存为html

    我尝试使用java将word文件另存为html 我将 Word 文件另存为 xml 它对我有用 Runtime rt1 Runtime getRuntime rt1 exec C Program Files Microsoft Office
  • EditText 的子类看起来与 Android 4 上的普通 EditText 不同

    这是我在开发真实应用程序时发现的一个 错误 但我创建了一个空白项目来重现它 我有以下布局
  • 从不同用户会话列表中选择最早的日期和时间

    我有一个用户访问会话表 记录网站访问者活动 accessid userid date time url 我正在尝试检索用户 ID 1234 的所有不同会话 以及每个不同会话的最早日期和时间 SELECT DISTINCT accessid
  • CS7036 C# 没有给出与 c# 所需的形式参数相对应的参数

    我创建了 bool dropIndexes 来 void ladujZBazy 并创建了 if dropIndexes 因为当我检查 checkListBox1 中列表中的项目并使用 textBox1 搜索某些项目时 我之前的检查消失了 我
  • 修饰符 static 只允许在常量变量声明中使用

    我有一个内部类 用于存储我用于游戏的控件的信息 现在我想在其中存储一个静态 ArrayList 其中包含所有控件的名称 但我收到此错误 修饰符 static 只允许在常量变量声明中 private class Control public
  • 获取鼠标指针下的单词

    根据这个 使用 JavaScript 获取光标下的单词 链接我可以在鼠标指针下获取单词 这对于英语来说很好 我改变它 阿拉伯语 p p Word span span
  • Android 上的 ZXing 入门

    我正在尝试将 ZXing 添加到我的项目中 添加一个按下时调用扫描仪的按钮 我找到了这个 http groups google com group android developers browse thread thread 788eb5
  • 如何重命名 Oracle XMLTYPE 节点

    我在 PL SQL 中有一个 XMLType 我需要重命名一些节点和一些值 例如