Oracle - выберите атрибут XPath в сериализованном контенте - PullRequest
0 голосов
/ 23 января 2019

Я работаю над сериализованным контентом, содержащимся в таблице на 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 голосов
/ 24 января 2019

Вы также должны учитывать пространства имен при доступе к префиксной переменной.Или вы можете явно игнорировать пространство имен, получая переменную по локальному имени :

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

или по полному имени :

.../@*[name()="z:Type"]
0 голосов
/ 24 января 2019

Это работает, ребята. Большое спасибо.

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

и

... / @ * [местное название () = "Тип"]

0 голосов
/ 24 января 2019

@z:Type представляется атрибутом Type из z пространства имен .Вы должны обращаться с ним так же, как с именами тегов.

Поэтому попробуйте заменить

/@z:Type

на

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