Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Вытащить значение из xml  [new]
XML_вопрос
Guest
Добрый день!
Имеется такой кусок xml

  <Row ss:StyleID="s146">
    <Cell ss:StyleID="s206"><Data ss:Type="String">:naim_pokaz_kaz
:naim_pokaz_rus</Data></Cell>
    <Cell ss:StyleID="s207"><Data ss:Type="String">:str_code</Data></Cell>
    <Cell ss:StyleID="s219"><Data ss:Type="String">:vsego</Data></Cell>
    <Cell ss:StyleID="s220"><Data ss:Type="String">:summa</Data></Cell>
    :NEW_COUNTRY_SUMM:
  </Row>

Как мне из него получить строку
<Cell ss:StyleID="s220"><Data ss:Type="String">:summa</Data></Cell>
?

То есть признаком является наличие переменной ":summa".

Спасибо!
19 янв 12, 13:43    [11932359]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить значение из xml  [new]
publexus
Member

Откуда: Москва
Сообщений: 955
XML_вопрос,

extract('/Row/Cell[Data/text()=":summa"]')
19 янв 12, 14:08    [11932649]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить значение из xml  [new]
XML_вопрос
Guest
publexus,

Спасибо! Чет не догоняю, как его использовать. У меня есть clob переменная и там лежит этот xml. Не понимаю синтаксис..
19 янв 12, 14:28    [11932874]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить значение из xml  [new]
Ramin Hashimzade
Member

Откуда: Азербайджан, Баку
Сообщений: 9979
Блог
XML_вопрос
publexus,

Спасибо! Чет не догоняю, как его использовать. У меня есть clob переменная и там лежит этот xml. Не понимаю синтаксис..


что за типы эти "ss:" ??? оракл не поймет их как хмл
19 янв 12, 14:30    [11932896]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить значение из xml  [new]
XML_вопрос
Guest
Ramin,

Это Excel документ, сохраненный как "Таблица XML"
19 янв 12, 14:35    [11932954]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить значение из xml  [new]
Ramin Hashimzade
Member

Откуда: Азербайджан, Баку
Сообщений: 9979
Блог
XML_вопрос
Ramin,

Это Excel документ, сохраненный как "Таблица XML"

короче , оно будет работать для этого
publexus
XML_вопрос,

extract('/Row/Cell[Data/text()=":summa"]')

так:

with t as (
select '  <Row StyleID="s146">
    <Cell StyleID="s206"><Data Type="String">:naim_pokaz_kaz
:naim_pokaz_rus</Data></Cell>
    <Cell StyleID="s207"><Data Type="String">:str_code</Data></Cell>
    <Cell StyleID="s219"><Data Type="String">:vsego</Data></Cell>
    <Cell StyleID="s220"><Data Type="String">:summa</Data></Cell>
    :NEW_COUNTRY_SUMM:
  </Row>' as s from dual
  )
select extract(tt.val, '/Row/Cell[Data/text()=":summa"]')
--  tr.*
  from (select xmltype(s) val from t) tt
19 янв 12, 14:41    [11933023]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить значение из xml  [new]
XML_вопрос
Guest
Ramin,

Да, с ss не работает. Ясно, спасибо. В крайнем случае буду реплейсить StyleID на ss:StyleID
19 янв 12, 14:59    [11933173]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить значение из xml  [new]
Сергей Арсеньев
Member

Откуда:
Сообщений: 4118
Ramin
что за типы эти "ss:" ??? оракл не поймет их как хмл

xmltype(clb).extract('/Workbook/Row/Cell[Data/text()=":summa"]','xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"')

правда xmlns останется
19 янв 12, 15:02    [11933198]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить значение из xml  [new]
Сергей Арсеньев
Member

Откуда:
Сообщений: 4118
Сергей Арсеньев,

ну и <Workbook xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"> оставить (или в ROW добавить xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet")
19 янв 12, 15:06    [11933237]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить значение из xml  [new]
XML_вопрос
Guest
Сергей Арсеньев,

Извините за глупую просьбу, но...можно пример использования на моих данных. Спаисбо!
19 янв 12, 15:11    [11933276]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить значение из xml  [new]
Elic
Member

Откуда:
Сообщений: 29976
XML_вопрос
но...можно пример использования на моих данных.
Твои данные - кривые:
select xmltype('<Row ss:StyleID="s146">
    <Cell ss:StyleID="s206"><Data ss:Type="String">:naim_pokaz_kaz
:naim_pokaz_rus</Data></Cell>
    <Cell ss:StyleID="s207"><Data ss:Type="String">:str_code</Data></Cell>
    <Cell ss:StyleID="s219"><Data ss:Type="String">:vsego</Data></Cell>
    <Cell ss:StyleID="s220"><Data ss:Type="String">:summa</Data></Cell>
    :NEW_COUNTRY_SUMM:
  </Row>') from dual;

ERROR:
ORA-31011: XML parsing failed
ORA-19202: Error occurred in XML processing
LPX-00234: namespace prefix "ss" is not declared
Error at line 1
ORA-06512: at "SYS.XMLTYPE", line 301
ORA-06512: at line 1
19 янв 12, 15:26    [11933405]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить значение из xml  [new]
tik-tak
Member

Откуда: Санкт-Петербург
Сообщений: 62
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 
Connected as xx
 
SQL> 
SQL> with t as
  2  (select
  3  '  <Row ss:StyleID="s146">
  4      <Cell ss:StyleID="s206"><Data ss:Type="String">:naim_pokaz_kaz
  5  :naim_pokaz_rus</Data></Cell>
  6      <Cell ss:StyleID="s207"><Data ss:Type="String">:str_code</Data></Cell>
  7      <Cell ss:StyleID="s219"><Data ss:Type="String">:vsego</Data></Cell>
  8      <Cell ss:StyleID="s220"><Data ss:Type="String">:summa</Data></Cell>
  9      :NEW_COUNTRY_SUMM:
 10    </Row>' as xml_data from dual
 11  )
 12  select REGEXP_SUBSTR(xml_data, '<Cell(.)+:summa(.)+') from t
 13  /
 
REGEXP_SUBSTR(XML_DATA,'<CELL(
-------------------------------------------------------------------
<Cell ss:StyleID="s220"><Data ss:Type="String">:summa</Data></Cell>
19 янв 12, 15:31    [11933444]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить значение из xml  [new]
-2-
Member

Откуда:
Сообщений: 15330
чем реплейсить, проще и безопаснее обернуть в клоб в еще один тег с указанием неймспеса
19 янв 12, 15:38    [11933517]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить значение из xml  [new]
XML_вопрос
Guest
Elic,
Уж какие есть, Excel не перепишешь

tik-tak,
Спасибо, попробую
19 янв 12, 15:39    [11933532]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить значение из xml  [new]
-2-
Member

Откуда:
Сообщений: 15330
XML_вопрос
Уж какие есть, Excel не перепишешь
эксел-то нормальный, из него выдернут ненормальный кусок.
19 янв 12, 15:42    [11933564]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить значение из xml  [new]
XML_вопрос
Guest
-2-,
Это одна строка шаблона отчета, не пол строки и не четверть..
19 янв 12, 16:02    [11933766]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить значение из xml  [new]
K790
Member

Откуда:
Сообщений: 631
XML_вопрос,

Вы знаете чем xsl от xml отличается ?
19 янв 12, 16:02    [11933768]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить значение из xml  [new]
и что такое неймспейс
Guest
и что такое неймспейс:)
19 янв 12, 16:13    [11933855]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить значение из xml  [new]
Сергей Арсеньев
Member

Откуда:
Сообщений: 4118
XML_вопрос
Извините за глупую просьбу, но...можно пример использования на моих данных. Спаисбо!

with t as (select '<Row xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" ss:StyleID="s146">
    <Cell ss:StyleID="s206"><Data ss:Type="String">:naim_pokaz_kaz
:naim_pokaz_rus</Data></Cell>
    <Cell ss:StyleID="s207"><Data ss:Type="String">:str_code</Data></Cell>
    <Cell ss:StyleID="s219"><Data ss:Type="String">:vsego</Data></Cell>
    <Cell ss:StyleID="s220"><Data ss:Type="String">:summa</Data></Cell>
    :NEW_COUNTRY_SUMM:
  </Row>' clb from dual)
select xmltype(clb).extract('/Row/Cell[Data/text()=":summa"]','xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"') from t;
19 янв 12, 16:43    [11934184]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить значение из xml  [new]
Сергей Арсеньев
Member

Откуда:
Сообщений: 4118
Сергей Арсеньев,

но лучше оставить

<?xml version="1.0" encoding="UTF-8"?>
<?mso-application progid="Excel.Sheet"?>
<Workbook xmlns:c="urn:schemas-microsoft-com:office:component:spreadsheet"
 xmlns:html="http://www.w3.org/TR/REC-html40"
 xmlns:o="urn:schemas-microsoft-com:office:office"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns="urn:schemas-microsoft-com:office:spreadsheet"
 xmlns:x2="http://schemas.microsoft.com/office/excel/2003/xml"
 xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
 xmlns:x="urn:schemas-microsoft-com:office:excel">

А то вдруг, там не только ss окажется.
19 янв 12, 16:46    [11934219]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить значение из xml  [new]
XML_вопрос
Guest
Сергей Арсеньев,
Спасибо!
23 янв 12, 07:54    [11949487]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить