powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / null xmlnamespace
3 сообщений из 3, страница 1 из 1
null xmlnamespace
    #39334495
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Утро доброе православные/правоверные/просветленные и другие :)

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

Есть 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
null xmlnamespace
    #39334539
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Добавить пространство имен " http://web.cbr.ru"
2. Указать это пространство для нод GetCursOnDateResponce и GetCursOnDateResult
...
Рейтинг: 0 / 0
null xmlnamespace
    #39334565
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
3 сообщений из 3, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / null xmlnamespace
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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