Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / null xmlnamespace / 3 сообщений из 3, страница 1 из 1
26.10.2016, 15:21:13
    #39334495
Vadim Lejnin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
null xmlnamespace
Утро доброе православные/правоверные/просветленные и другие :)

Не дайте сгинуть в рассвете лет во мраке невежества.

Есть XML курса валют с cbr.ru
Запутался с XPATH

Хочу получить елементы
Код: plsql
1.
<ValuteData xmlns="">



родил вот такого уродца:
Код: plsql
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.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
with t (xmltxt) as (
select N'<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<GetCursOnDateResponse xmlns="http://web.cbr.ru/">
<GetCursOnDateResult>
<xs:schema id="ValuteData" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:msprop="urn:schemas-microsoft-com:xml-msprop">
  <xs:element name="ValuteData" msdata:IsDataSet="true" msdata:UseCurrentLocale="true" msprop:OnDate="20160920">
    <xs:complexType>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element name="ValuteCursOnDate">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="Vname" type="xs:string" minOccurs="0" />
              <xs:element name="Vnom" type="xs:decimal" minOccurs="0" />
              <xs:element name="Vcurs" type="xs:decimal" minOccurs="0" />
              <xs:element name="Vcode" type="xs:int" minOccurs="0" />
              <xs:element name="VchCode" type="xs:string" minOccurs="0" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:complexType>
  </xs:element>
</xs:schema>
<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
<ValuteData xmlns="">
  <ValuteCursOnDate diffgr:id="ValuteCursOnDate1" msdata:rowOrder="0">
    <Vname>Австралийский доллар</Vname>
    <Vnom>1</Vnom>
    <Vcurs>48.9736</Vcurs>
    <Vcode>36</Vcode>
    <VchCode>AUD</VchCode>
  </ValuteCursOnDate>
  <ValuteCursOnDate diffgr:id="ValuteCursOnDate2" msdata:rowOrder="1">
    <Vname>Азербайджанский манат</Vname>
    <Vnom>1</Vnom>
    <Vcurs>39.3605</Vcurs>
    <Vcode>944</Vcode>
    <VchCode>AZN</VchCode>
  </ValuteCursOnDate>
</ValuteData>
</diffgr:diffgram>
</GetCursOnDateResult>
</GetCursOnDateResponse>
</soap:Body></soap:Envelope>
' from dual
)
select x.*
from t,xmltable(
 XMLNamespaces (
  DEFAULT ''
  ,'http://schemas.xmlsoap.org/soap/envelope/' as "soap"
  ,'http://www.w3.org/2001/XMLSchema' as "xs"
  ,'urn:schemas-microsoft-com:xml-msdata' as "msdata"
  ,'urn:schemas-microsoft-com:xml-diffgram-v1' as "diffgr"
  )
--,'//ValuteCursOnDate'
,'/soap:Envelope/soap:Body/GetCursOnDateResponse/GetCursOnDateResult/diffgr:diffgram/ValuteData/ValuteCursOnDate'
  PASSING XMLTYPE(t.xmltxt) 
  columns
   Vname nvarchar2(1024) path 'Vname'
  ,vnom  nvarchar2(30) path 'Vnom'
  ,vcurs nvarchar2(30) path 'Vcurs'
  ,vcode nvarchar2(30) path 'Vcode'
  ,VchCode nvarchar2(1024) path 'VchCode'
) as x;




Если использовать поисковый XPath, то разумеется взлетает
Код: plsql
1.
,'//ValuteCursOnDate'



Если честный
Код: plsql
1.
'/soap:Envelope/soap:Body/GetCursOnDateResponse/GetCursOnDateResult/diffgr:diffgram/ValuteData/ValuteCursOnDate'



То пусто
Вроде все namespace определены, путь раз 10 проверил...

ЧЯДНТ?
ткните носом, можно ссылкой


---------------------
Liberty is a well-armed lamb contesting the vote!
(С) BENJAMIN FRANKLIN
...
soap: vlejnin mail ру
...
Рейтинг: 0 / 0
26.10.2016, 15:45:35
    #39334539
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
null xmlnamespace
1. Добавить пространство имен " http://web.cbr.ru"
2. Указать это пространство для нод GetCursOnDateResponce и GetCursOnDateResult
...
Рейтинг: 0 / 0
26.10.2016, 16:00:35
    #39334565
Vadim Lejnin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
null xmlnamespace
andrey_anonymous,
Спасибо, добрый человек!
заработало.
Код: plsql
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.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
with t (xmltxt) as (
select N'<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<GetCursOnDateResponse xmlns="http://web.cbr.ru/">
<GetCursOnDateResult>
<xs:schema id="ValuteData" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:msprop="urn:schemas-microsoft-com:xml-msprop">
  <xs:element name="ValuteData" msdata:IsDataSet="true" msdata:UseCurrentLocale="true" msprop:OnDate="20160920">
    <xs:complexType>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element name="ValuteCursOnDate">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="Vname" type="xs:string" minOccurs="0" />
              <xs:element name="Vnom" type="xs:decimal" minOccurs="0" />
              <xs:element name="Vcurs" type="xs:decimal" minOccurs="0" />
              <xs:element name="Vcode" type="xs:int" minOccurs="0" />
              <xs:element name="VchCode" type="xs:string" minOccurs="0" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:complexType>
  </xs:element>
</xs:schema>
<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
<ValuteData xmlns="">
  <ValuteCursOnDate diffgr:id="ValuteCursOnDate1" msdata:rowOrder="0">
    <Vname>Австралийский доллар</Vname>
    <Vnom>1</Vnom>
    <Vcurs>48.9736</Vcurs>
    <Vcode>36</Vcode>
    <VchCode>AUD</VchCode>
  </ValuteCursOnDate>
  <ValuteCursOnDate diffgr:id="ValuteCursOnDate2" msdata:rowOrder="1">
    <Vname>Азербайджанский манат</Vname>
    <Vnom>1</Vnom>
    <Vcurs>39.3605</Vcurs>
    <Vcode>944</Vcode>
    <VchCode>AZN</VchCode>
  </ValuteCursOnDate>
</ValuteData>
</diffgr:diffgram>
</GetCursOnDateResult>
</GetCursOnDateResponse>
</soap:Body></soap:Envelope>
' from dual
)
select x.*
from t,xmltable(
 XMLNamespaces (
  DEFAULT ''
  ,'http://schemas.xmlsoap.org/soap/envelope/' as "soap"
  ,'http://www.w3.org/2001/XMLSchema' as "xs"
  ,'urn:schemas-microsoft-com:xml-msdata' as "msdata"
  ,'urn:schemas-microsoft-com:xml-diffgram-v1' as "diffgr"
  ,'http://web.cbr.ru/' as "cbr"
  )
--,'//ValuteCursOnDate'
,'/soap:Envelope/soap:Body/cbr:GetCursOnDateResponse/cbr:GetCursOnDateResult/diffgr:diffgram/ValuteData/ValuteCursOnDate'
  PASSING XMLTYPE(t.xmltxt) 
  columns
   Vname nvarchar2(1024) path 'Vname'
  ,vnom  nvarchar2(30) path 'Vnom'
  ,vcurs nvarchar2(30) path 'Vcurs'
  ,vcode nvarchar2(30) path 'Vcode'
  ,VchCode nvarchar2(1024) path 'VchCode'
) as x;
VNAME                          VNOM       VCURS      VCODE VCHCODE
------------------------------ ---------- ---------- ----- ----------
Австралийский доллар           1          48.9736    36    AUD
Азербайджанский манат          1          39.3605    944   AZN
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / null xmlnamespace / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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