Oracle-在序列化内容中选择XPath属性

时间:2019-01-23 19:30:06

标签: sql xml oracle xpath xml-serialization

我处理Oracle 11g表中包含的序列化内容。我需要在XML内容中修改属性值。因此,我使用XPath来访问标签...我可以更改标签的值,但不能修改属性值。

我的文件大致是这样设计的:

<ItemsParams>
    <Cores>
        <Inral z:Type="someTexte1">
            <FinalTags>Value1</FinalTags>
        </Inral>
    <Cores>
<ItemsParams>

当我需要更改FinalTags值时,我在查询中使用此XPath:

XPath = *[name()="ItemsParam"]/*[name()="Testing"]/*[name()="Topics"]/*[name()="Parameter"]/*[name()="Texts"]/*[name()="Cores"]/*[name()="Inral"]/*[name()=''Value'']/text()

它有效。

但是当我需要更改属性"z:Type"的值时,我使用:

XPath = *[name()="ItemsParam"]/*[name()="Testing"]/*[name()="Topics"]/*[name()="Parameter"]/*[name()="Texts"]/*[name()="Cores"]/*[name()="Inral"]/@z:Type

并且无法访问它。.经过多次测试,我认为Oracle无法忍受访问属性所需的“ @”。

3 个答案:

答案 0 :(得分:0)

@z:Type似乎是Type名称空间中的z属性。您需要以与处理标签名称相同的方式来处理它。

所以尝试替换

/@z:Type

/@*[name()="Type"]

答案 1 :(得分:0)

访问前缀变量时,还应该考虑名称空间。或者,您可以通过使用本地名称获取变量来显式忽略名称空间:

new_output

全名

desired_output

答案 2 :(得分:0)

是工人。非常感谢。

  

... / @ * [name()=“ z:Type”]

  

... / @ * [local-name()=“ Type”]

相关问题