我处理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无法忍受访问属性所需的“ @”。
答案 0 :(得分:0)
@z:Type
似乎是Type
名称空间中的z
属性。您需要以与处理标签名称相同的方式来处理它。
所以尝试替换
/@z:Type
与
/@*[name()="Type"]
答案 1 :(得分:0)
访问前缀变量时,还应该考虑名称空间。或者,您可以通过使用本地名称获取变量来显式忽略名称空间:
new_output
或全名:
desired_output
答案 2 :(得分:0)
是工人。非常感谢。
... / @ * [name()=“ z:Type”]
和
... / @ * [local-name()=“ Type”]