powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Помогите распарсить XML
6 сообщений из 6, страница 1 из 1
Помогите распарсить XML
    #38425855
Фотография sasha27
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем добрый вечер. Нужна помощь в распасивании XML. БД ASA12.
Есть XML такого вида:

Код: xml
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.
 <?xml version="1.0" encoding="Windows-1251" ?> 
- <tr>
  <pole>1410</pole> 
  <pole>2013-10-12</pole> 
  <pole>10</pole> 
  <pole>9</pole> 
  <pole>28</pole> 
  <pole>12</pole> 
  <pole>31</pole> 
  <pole>35920</pole> 
  <pole>188422</pole> 
  <pole>2331600</pole> 
  </tr>
- <tr>
  <pole>1409</pole> 
  <pole>2013-10-11</pole> 
  <pole>29</pole> 
  <pole>23</pole> 
  <pole>24</pole> 
  <pole>4</pole> 
  <pole>27</pole> 
  <pole>41836</pole> 
  <pole>207104</pole> 
  <pole>2256360</pole> 
  </tr>


... и т.п.

Как при парсинге во временную таблицу, сделать так, чтобы значения элементов <pole> были в полях таблицы?
Вот так: названия полей неважно, важен вывод в таком виде
__________________________________________________
1410|2013-10-12|10|9 |28|12|31|35920|188422|2331600|
1409|2013-10-11|29|23|24|4 |27|41836|207104|2256360|
.......|................|...|...|....|...|....|........|..........|............|
.......|................|...|...|....|...|....|........|..........|............|
.......|................|...|...|....|...|....|........|..........|............|
__________________________________________________

Заранее благодарен.
...
Рейтинг: 0 / 0
Помогите распарсить XML
    #38426800
Фотография sasha27
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверно сформулировал вопрос
Как при распарсивании XML получить доступ значению определенного элемента.
Например хочу вытащить все 5-е и 7-е значения всех элементов во всех узлах.

при попытке сделать так

Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT * into #Test FROM OPENXML(@xml, '/table/tr')
   WITH (p1 char(200) 'pole[1]',
            p2 char(200) 'pole[2]',
            p3 char(200) 'pole[3]',
            p4 char(200) 'pole[4]');

   select * from #Test; 



ругается:
Could not execute statement.
Feature 'position tests' not implimented
SQLCODE=-134, ODBC 3 State="HY000"

в справке для SQLCODE=-134 сообщается:
You attempted to carry out an operation or use a feature that is not implemented in this version of SQL Anywhere

Вы попытались провести операцию или использовать функцию, которая не реализована в этой версии SQL Anywhere.

И как в этой версии осуществить задуманное...?
...
Рейтинг: 0 / 0
Помогите распарсить XML
    #38430400
Фотография sasha27
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просил вчера модераторов удалить тему, чтобы оформить по правилам, не удаляют...
Тогда буду пытаться править по "живому".
...
Рейтинг: 0 / 0
Помогите распарсить XML
    #38430406
Фотография sasha27
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASA12.
Есть затык... Нужно распарсить XML, с доступом к определенному узлу(1,3 или как поставят задачу).
Есть такого вида XML - узлы одинаковые, элементы тоже, значения элементов разные.

Код: xml
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.
<?xml version="1.0" encoding="Windows-1251" ?>
<table>
- <tr>
<pole>1410</pole>
<pole>2013-10-12</pole>
<pole>10</pole>
<pole>9</pole>
<pole>28</pole>
<pole>12</pole>
<pole>31</pole>
<pole>35920</pole>
<pole>188422</pole>
<pole>2331600</pole>
</tr>
- <tr>
<pole>1409</pole>
<pole>2013-10-11</pole>
<pole>29</pole>
<pole>23</pole>
<pole>24</pole>
<pole>4</pole>
<pole>27</pole>
<pole>41836</pole>
<pole>207104</pole>
<pole>2256360</pole>
</tr>
... и т.п.
</table>


Как при распарсивании получить доступ к i-му значению элемента. Например надо извлечь 3 и 5 значение всех элементов...?
Заранее благодарен.
...
Рейтинг: 0 / 0
Помогите распарсить XML
    #38430459
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sasha27Просил вчера модераторов удалить тему, чтобы оформить по правилам, не удаляют...
Тогда буду пытаться править по "живому".Не вижу смысла удалять нормальную тему. Но если сильно-сильно хочешь - могу и прибить. Надо?

А по поводу основного вопроса.
Не уверен что то что ты хочешь возможно. Тут идет расхождение между позиционированным подходом (XML) и не позиционированным (SQL).

В принципе, ты можешь сделать в духе:
Код: sql
1.
2.
3.
4.
SELECT id=number(), *
into #Test 
FROM  OPENXML(@xml, '/table/tr/pole')
   WITH (pole varchar(64), './text' )


Получишь нумерованные строки. И потом уже фильтруешь по полученному id.
Должно сработать, но если openxml в результате каких-нибудь своих внутренних заморочек попытается переставить пару строк местами (а с точки зрения SQL это легально), либо (что более вероятно) кто-нибудь попытается добавить туда сортировку - все рухнет.
...
Рейтинг: 0 / 0
Помогите распарсить XML
    #38434763
Фотография sasha27
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl, спасибо, попробовал.

Сделал вот так:

SELECT * into #Temp FROM OPENXML(@xml, '/table/tr/pole')
WITH (
Field1 char(200) '@mp:id',
Field2 integer '../@mp:id',
Field3 char(200) 'text()');

Что получил: номера строк, номера групп, значения. В курсоре могу запросить все записи по группе, вывод в строку всех значений в группе командой LIST.
Далее из строки могу вытащить любое значение(1,3,4 и т.д.). Вот примерно так решил эту проблему.
Возможно есть более красивый и менее замороченный способ, но пока его не нашел...
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Помогите распарсить XML
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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