Модераторы: diadiavova
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Правильный XPath по дереву с атрибутами из ns, Не получается XPath к конечному элементу 
V
    Опции темы
EgoBrain
Дата 17.10.2016, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 23.3.2008
Где: Комната

Репутация: нет
Всего: 2



Не удается проложить путь к значению конечного элемента, если в дерево состоит из элементов различных пространств имён.
На самом деле я точно не уверен в справедливости высказывания если.
Пытаюсь получить значение элемента 
Цитата
S:Envelope/S:Body/ns8:getPersonalCertificateBirthResponse/ns5:MessageData/ns5:AppData/ns4:certificateBirthResponseObj/ns4:certificateBirth/actRecordNumber
 но получаю все значения всех элементов документа.
Если использовать local-name()=, то значение извлекается вполне успешно.
Цитата

//*[local-name()='certificateBirthResponseObj']/*[local-name()='certificateBirth']/*[local-name()='actRecordNumber']

Почему не работает явный путь?

Вот исходный документ:
Код

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:ds="http://www.w3.org/2000/09/xmldsig#" 
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" 
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
    <S:Body wsu:Id="body">
        <ns8:getPersonalCertificateBirthResponse>
            <ns5:MessageData>
                <ns5:AppData Id="AppData">
                    <ns4:certificateBirthResponseObj>
                        <ns4:certificateBirth>
                            <actRecordNumber>9999</actRecordNumber>
                        </ns4:certificateBirth>
                    </ns4:certificateBirthResponseObj>                    
                </ns5:AppData>
            </ns5:MessageData>
        </ns8:getPersonalCertificateBirthResponse>
    </S:Body>
</S:Envelope>



Это сообщение отредактировал(а) EgoBrain - 18.10.2016, 01:32
PM MAIL ICQ Skype   Вверх
diadiavova
Дата 17.10.2016, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5820
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 22
Всего: 142



EgoBrain, программа, обрабатывающая XPath должна быть извещена о значении префиксов, чтобы можно было сопоставить их пространствам имен. Судя по тому, что в соседней теме ты что-то подобное использовал в XSLT, по всей видимости именно в нем тебе это и нужно. Ну тут все просто: поскольку XSLT сам является словарем XML, стало быть правила тут те же, что и в любом XML - объяви нужные тебе пространства имен в корневом элементе преобразования и все заработает как надо.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
EgoBrain
Дата 18.10.2016, 01:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 23.3.2008
Где: Комната

Репутация: нет
Всего: 2



Цитата(diadiavova @ 17.10.2016,  12:49)
EgoBrain, программа, обрабатывающая XPath должна быть извещена о значении префиксов, чтобы можно было сопоставить их пространствам имен. Судя по тому, что в соседней теме ты что-то подобное использовал в XSLT, по всей видимости именно в нем тебе это и нужно. Ну тут все просто: поскольку XSLT сам является словарем XML, стало быть правила тут те же, что и в любом XML - объяви нужные тебе пространства имен в корневом элементе преобразования и все заработает как надо.

diadiavova, ты правильно заметил что в этой версии исходного документа я просто неймспейсы не объявил. На самом деле и в этой и в той теме идет работа с одним документом. Не буду же я всю партянку выкладывать, хоть там и тестовые данные.
К сожалению при корректном документе у меня и не получается достучатся до нужного элемента без использования local-name()=, что меня весьма удручает, чувствую себя не полноценным. Видимо неверно толкую мануал по XPath  smile 
PM MAIL ICQ Skype   Вверх
EgoBrain
Дата 18.10.2016, 08:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 23.3.2008
Где: Комната

Репутация: нет
Всего: 2



Цитата(diadiavova @ 17.10.2016,  20:49)
объяви нужные тебе пространства имен в корневом элементе преобразования и все заработает как надо

А да, извиняюсь, действительно упустил пару namespace-ов.
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "XML/XSLT"
diadiavova

Прежде чем опубликовать вопрос, попробуйте воспользоваться поиском - возможно тема уже поднималась.

Также рекомендуем Вам зайти в раздел FAQ ,раздел дополняется и, возможно, там вы увидите готовое решение.

Для ответов на часто задаваемые вопросы существует FAQ раздела. Новости можно публиковать в разделе новостей. Для статей так же есть специальный раздел

Желаем удачи в Вашем деле!


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, diadiavova.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | XML, XSL | Следующая тема »


 




[ Время генерации скрипта: 0.1285 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.