【问题标题】:Update xml element value in Oracle在 Oracle 中更新 xml 元素值
【发布时间】:2012-04-16 03:45:54
【问题描述】:

在 Oracle 表中有一个 XMLTYPE 列,我想使用 UpdateXML 方法更新一些 xml 元素的值,但由于应用在非父 xml 元素上的命名空间,我在这样做时遇到了麻烦。我的 elmenets 的 xml 结构看起来像:

<a>
  <b xmlns="urn:www.someSite.com/myModel">
    <c>my value</c>
  </b>
</a>

并且更新以下表格不起作用:

UPDATE myTable 
  SET myColumn = UpdateXML(myColumn, '/a/b/c','other value', 'xmlns="urn:www.someSite.com/myModel"');

【问题讨论】:

  • 你不能将 xml 更改为至少有一个命名空间的短名称,即xmlns:ns1="urn:www.someSite.com/myModel",这样你就可以做到/a/ns1:b/ns1:c
  • 不行,我不能更改xml,这是保存在数据库中的格式,不能更改。

标签: xml oracle namespaces updatexml


【解决方案1】:

this post差不多,但更丑……

UPDATE myTable
   SET myColumn = updatexml(myColumn ,
                 '/a/*',
                 updatexml(extract(myColumn , '/a/*'),
                           'b/c/text()',
                           'my new value',
                           'xmlns=urn:www.someSite.com/myModel'));

编辑:如果a 中有多个b 元素,则必须更改a 中的整个文本,而不是针对每个孩子,因此您可以尝试:

UPDATE myTable
   SET myColumn = updatexml(myColumn ,
                 '/a/text()',
                 updatexml(extract(myColumn , '/a/*'),
                           'b/c/text()',
                           'my new value',
                           'xmlns=urn:www.someSite.com/myModel'));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-16
    • 1970-01-01
    • 1970-01-01
    • 2010-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多