【发布时间】:2020-09-15 16:34:27
【问题描述】:
我正在尝试使用 Oracle sql 语句将属性添加到 xml。 XML 作为数据存储在表“项目”的列中。我没有问题添加一个新的 'id' 属性,其值为 '123',如下面的查询所示。
UPDATE item SET item_xml = INSERTCHILDXML(item_xml , '/item','@id', '123') where customer_id = '1';
但是,如果我添加 xml 命名空间而不是常规的 'id' 属性,如果我想在 xml 下面附加命名空间(如 'xml:id')会抛出错误'无效的 XPATH 表达式',请告诉我有什么方法可以避免抛出这个错误
UPDATE item SET item_xml = INSERTCHILDXML(item_xml , '/item','@xml:id', '123') where customer_id = '1';
我知道我们在普通情况下不使用命名空间,但是我给出了“id”属性作为示例,因为我们的应用程序生成的 xml 在其他系统中使用,该系统需要为少数属性提供命名空间的属性。
更新 xml 后应该如下所示,请假设属性 'xml:id="123"' 最初不存在于表 'item' 的 xml clob 中。
<items>
<item xml:id="123">Apple</item>
<items>
【问题讨论】:
-
您是在尝试添加具有该 ID 的新项目(在这种情况下,“Apple”来自哪里?),还是将属性添加到现有项目?包括该客户的起始 XML 可能会有所帮助。根据您的结果,您的第一次更新实际上不会做任何事情。
-
我将“id”属性添加到现有 xml 到“item”元素。 “Apple”是元素“item”的值。所以 xpath 将是“/items/item”。第一个查询将在正确的 xpath 之后工作,即 '/items/item' 但是,一旦您添加命名空间 '@xml:id' 查询将开始抛出错误,这是真正的问题,我需要解决它。如果 xpath 不正确,则不会设置该属性,但不会给出“无效的 XPATH 表达式”。
-
哦...你真的还在使用 Oracle 10g 吗?