我处理 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无法忍受访问属性所需的"@"。
在访问前缀变量时,还应考虑命名空间。或者,您可以通过按本地名称获取变量来显式忽略命名空间:
.../@*[local-name()="Type"]
或全名:
.../@*[name()="z:Type"]
是工作的人。谢谢。
.../@*[name()="z:Type"]
和
.../@*[local-name()="Type"]