Гость
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XPath и xmlns / 8 сообщений из 8, страница 1 из 1
07.09.2011, 20:12
    #37429773
Царь в голове
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XPath и xmlns
Дано:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
<?xml version="1.0" standalone="yes"?>
<sdnList xmlns:xsi="строка1" xmlns="строка2" xsi:schemaLocation="строка3">
  <publshInformation>
    <Publish_Date> 02 / 11 / 2010 </Publish_Date>
    <Record_Count> 2 </Record_Count>
  </publshInformation>
  <sdnEntry>
    <uid> 111 </uid>
    <lastName>Last Name1</lastName>
  </sdnEntry>
  <sdnEntry>
    <uid> 222 </uid>
    <lastName>Last Name1</lastName>
  </sdnEntry>
</sdnList>
Надо:
Посредством XPath выбрать множество узлов <sdnEntry>.
Использую такой XPath:
Код: plaintext
'/sdnList/sdnEntry'
Не работает, т.е. не выбирает ничего.
Если убрать
Код: plaintext
xmlns="строка2"
то выбирает то, что надо.
Как написать правильный XPath для текущего XML?
Использую средства Oracle. Следующий код
Код: plaintext
extract(value(f), '/sdnList/sdnEntry')
находится в представлении (VIEW). Поэтому хотелось бы обойтись только этой одной строкой XPath.
...
Рейтинг: 0 / 0
07.09.2011, 21:23
    #37429814
refreg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XPath и xmlns
Царь в голове,

В XPath - local-name()
В MSXML - SelectionNamespaces
В оракле - не знаю...
...
Рейтинг: 0 / 0
07.09.2011, 21:39
    #37429822
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XPath и xmlns
refregВ XPath - local-name()Бяка

2Царь в голове, уточните где вы хотите это использовать
...
Рейтинг: 0 / 0
08.09.2011, 11:52
    #37430370
Царь в голове
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XPath и xmlns
_Vasilisk_2Царь в голове, уточните где вы хотите это использовать
В своем коде Оракл позволяет работать с XML. Он имеет соответствующие типы данных для таблиц и несколько пакетов и функций для использования в SQL. Мне нужно такое выражение XPath, которое не нуждается в дополнительных настройках, т.е. само по себе дает нужный результат.
Я в XML не силен, поэтому прошу писать подробнее по возможности.
...
Рейтинг: 0 / 0
08.09.2011, 13:07
    #37430560
Царь в голове
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XPath и xmlns
Вот самодостаточный код для Оракла
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
select extractvalue (value (a), '/sdnEntry/uid') as auid
      ,extractvalue (value (a), '/sdnEntry/lastName') as lastName
from table(xmlsequence(extract(xmltype('<?xml version="1.0" standalone="yes"?>
<sdnList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ' 
--|| '    xmlns="http://tempuri.org/sdnList.xsd" ' -- ***
|| '        xsi:schemaLocation="http://tempuri.org/sdnList.xsd OFAC_SCH.xsd">
  <publshInformation>
    <Publish_Date>02/10/2010</Publish_Date>
    <Record_Count>4301</Record_Count>
  </publshInformation>
  <sdnEntry>
    <uid>11</uid>
    <lastName>name1</lastName>
  </sdnEntry>
  <sdnEntry>
    <uid>22</uid>
    <lastName>name2</lastName>
  </sdnEntry>
  <sdnEntry>
    <uid>33</uid>
    <lastName>name3</lastName>
  </sdnEntry>
  <sdnEntry>
    <uid>44</uid>
    <lastName>name4</lastName>
  </sdnEntry>
</sdnList>'), '/sdnList/sdnEntry'))) a
;
В таком виде возвращает 4 строки. Если раскомментировать строчку *** то перестает возвращать строки.
...
Рейтинг: 0 / 0
08.09.2011, 13:23
    #37430596
Царь в голове
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XPath и xmlns
Насколько я понимаю,
Код: plaintext
xmlns="строка"
устанавливает namespace по умолчанию. Вопрос в том, как учесть это в XPath.
...
Рейтинг: 0 / 0
08.09.2011, 13:42
    #37430644
refreg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XPath и xmlns
Царь в голове,

4117966

PS. У extract есть три параметр, третий как раз пространство имен...
...
Рейтинг: 0 / 0
08.09.2011, 14:08
    #37430709
Царь в голове
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XPath и xmlns
Ура! Заработало!
refreg, спасибо!

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
select extractvalue (value (a), '/sdnEntry/uid', p.ns) as auid
      ,extractvalue (value (a), '/sdnEntry/lastName', p.ns) as lastName
--*
from (select 'xmlns="string2"' as ns from dual) p,
table(xmlsequence(extract(xmltype('<?xml version="1.0" standalone="yes"?>
<sdnList xmlns:xsi="string1" ' 
|| '    xmlns="string2" ' -- ***
|| '        xsi:schemaLocation="string3">
  <publshInformation>
    <Publish_Date>02/10/2010</Publish_Date>
    <Record_Count>4301</Record_Count>
  </publshInformation>
  <sdnEntry>
    <uid>11</uid>
    <lastName>name1</lastName>
  </sdnEntry>
  <sdnEntry>
    <uid>22</uid>
    <lastName>name2</lastName>
  </sdnEntry>
  <sdnEntry>
    <uid>33</uid>
    <lastName>name3</lastName>
  </sdnEntry>
  <sdnEntry>
    <uid>44</uid>
    <lastName>name4</lastName>
  </sdnEntry>
</sdnList>'), '/sdnList/sdnEntry', p.ns))) a
;
...
Рейтинг: 0 / 0
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XPath и xmlns / 8 сообщений из 8, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]