首页 > 解决方案 > Oracle - 在序列化内容中选择 XPath 属性

问题描述

我处理 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无法忍受需要访问属性的“@”..

标签: sqlxmloraclexpathxml-serialization

解决方案


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

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

全名

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

推荐阅读