:: Visual Foxpro, Foxpro for DOS
Вытащить теги из XML
PavlikPavlikovich
Автор

Сообщений: 171
Дата регистрации: 21.07.2010
Здравствуйте!
на форуме много информации по этому поводу. Но я не могу сообразить как мне это применить. Кому не жалко, помогите!
Нужно их XML файла выбрать строки в курсор между тегами <КИЗ></КИЗ>. Больше мне ничего из этого файла не надо. (кол-во значений не известно)
Хотел сделать вот так вот. Но понимаю что что-то не так или как говориться так никто не делает ))
SELECT 0
CREATE CURSOR vr1 (pole1 c(50))
путькфайлу=GETFILE("xml")
IF EMPTY(путькфайлу)
=MESSAGEBOX('Вы отказались от выбора файла',64,'А что так?')
RETURN
ENDIF
SELECT vr1
APPEND FROM (mkmпутькфайлу) DELIMITED WITH CHARACTER ""
На выходе получался курсор и я подумал что можно выбрать из него строки в которых содержиться <КИЗ>
sele SUBSTR(pole1,6,31) as pole2 from vr1 into curs vr2 readwrite where "<КИЗ>"$upper(pole1)
Тоже вроде всё хорошо, но я не могу отрезать от полученного символы <КИЗ>. SUBSTR(vr2.pole2,6,31) не работает. Режет не верно. Такое ощущение что это и не символы вовсе у меня в курсоре. Либо пробелы какие-то мешают.
Я уже понимаю что пошёл не той дорогой. Помогите пожалуйста.



Исправлено 1 раз(а). Последнее : PavlikPavlikovich, 22.01.21 14:30
Ratings: 0 negative/0 positive
Re: Вытащить теги из XML
ssa

Сообщений: 13008
Откуда: Москва
Дата регистрации: 23.03.2005
Открой для себя функцию STREXTRACT() вместо Substring().
Примерно так:
sele STREXTRACT(pole1,"<КИЗ>","</КИЗ>") as pole2 from vr1 into curs vr2 readwrite


------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/1 positive
Re: Вытащить теги из XML
PavlikPavlikovich
Автор

Сообщений: 171
Дата регистрации: 21.07.2010
ничего совсем не вытащилось, а если в этом же кусоре кидать в другое поле, то там нули стоят.
Я говорю, что как буд-то я работаю не с символами.
Не понимаю. В курсор так допустимо из XML вытаскивать? Как я сделал.
Ratings: 0 negative/0 positive
Re: Вытащить теги из XML
of63

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Посмотри в HEX-редакторе содержимое файла (поля таблицы), может кодировка, UTF-8... SUBSTR(vr2.pole2,6,31) должна работать
Ratings: 0 negative/0 positive
Re: Вытащить теги из XML
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
Ещё могут быть какие-нибудь невидимые символы,влияющие на работу VFP.
Ratings: 0 negative/0 positive
Re: Вытащить теги из XML
PavlikPavlikovich
Автор

Сообщений: 171
Дата регистрации: 21.07.2010
of63
Посмотри в HEX-редакторе содержимое файла (поля таблицы), может кодировка, UTF-8... SUBSTR(vr2.pole2,6,31) должна работать
проверил через CPDBF() Показало 1251. Что и логично. Ведь курсор я сам создал. А как посмотреть курсор поля я не знаю

А если пойти другим путём.
XMLTOCURSOR(путькфайлу,"vr1",512)
Создаёт курсор с мемо полём.
Кто подскажет что мне дальше с этим делать?
Или опять копаю не туда? Меня мой изначальный вариант в принципе устраивал бы. Если бы можно было данные достать нормально.
Ratings: 0 negative/0 positive
Re: Вытащить теги из XML
of63

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
? 0h + vr2.pole2 && посмотреть строку побайтно, начиная с левого (младшего) байта
Ratings: 0 negative/0 positive
Re: Вытащить теги из XML
PavlikPavlikovich
Автор

Сообщений: 171
Дата регистрации: 21.07.2010
Я не понял почему так, но почему-то у меня сработало вот так. Всё получилось.
SELECT 0
CREATE CURSOR vr1 (pole1 c(60))
путькфайлу=GETFILE("xml")
SELECT vr1
APPEND FROM (путькфайлу) DELIMITED WITH CHARACTER " "
*пробывал тут select c STREXTRACT() не выходит. Получаю пустую таблицу., а REPLACE ALL работает. Мистика...
REPLACE ALL pole1 WITH STREXTRACT(vr1.pole1,"<КИЗ>","</КИЗ>")
*DELETE ALL FOR ALLTRIM(vr1.pole1)=" " && не сработало.
DELETE ALL FOR SUBSTR(pole1,1,31)=" "
SET DELETED On
browse
*хотелось бы конечно в один заход Select ом выдернуть то что нужно, но получаю пустую таблицу.



Исправлено 2 раз(а). Последнее : PavlikPavlikovich, 22.01.21 20:31
Ratings: 0 negative/0 positive
Re: Вытащить теги из XML
akvvohinc

Сообщений: 4224
Откуда: Москва
Дата регистрации: 11.11.2008
Цитата:
DELETE ALL FOR ALLTRIM(vr1.pole1)=" " && не сработало.
Потому что по умолчанию пустая строка не равна пробелу (но пробел равен пустой строке).

Можно было написать так:
DELETE ALL FOR " "=ALLTRIM(vr1.pole1)
или так
DELETE ALL FOR ALLTRIM(vr1.pole1)==""
или так
DELETE ALL FOR EMPTY(vr1.pole1)

Ваш вариант - "некрасивый".

Цитата:
хотелось бы конечно в один заход Select ом выдернуть то что нужно, но получаю пустую таблицу
Довавьте в SELECT функцию CAST()
SELECT CAST(STREXTRACT(pole1,"<КИЗ>","</КИЗ>") AS C(60)) AS kiz FROM vr1 INTO CURSOR vr2



Исправлено 1 раз(а). Последнее : akvvohinc, 22.01.21 23:55
Ratings: 0 negative/0 positive
Re: Вытащить теги из XML
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Из XML стоит выбирать данные используя XML парсер, а не функции разбора строк. и тем более не нудны никакие курсоры в которые зачем-то загоняется строковое представление этого самого xml-я


------------------
WBR, Igor
Ratings: 0 negative/1 positive
Re: Вытащить теги из XML
PavlikPavlikovich
Автор

Сообщений: 171
Дата регистрации: 21.07.2010
akvvohinc
Цитата:
DELETE ALL FOR ALLTRIM(vr1.pole1)=" " && не сработало.
Потому что по умолчанию пустая строка не равна пробелу (но пробел равен пустой строке).
Спасибо! Не знал. Думал не важно расположение.
akvvohinc
Ваш вариант - "некрасивый".
Кроме меня моего ужаса никто не видит)) Правда вот иногда здесь приходиться стыдиться

Igor Korolyov
Из XML стоит выбирать данные используя XML парсер, а не функции разбора строк. и тем более не нудны никакие курсоры в которые зачем-то загоняется строковое представление этого самого xml-я
Я догадывался что делаю не так. Шел на это от безысходности. Не умею.

Все спасибо! Задача в итоге решилась.
Ratings: 0 negative/0 positive
Re: Вытащить теги из XML
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
PavlikPavlikovich
Не умею.

Здесь можно много чему научиться. Даже тому, что в кошмарном сне не приснится.

Надо только грамотно поставить вопрос.
Ratings: 0 negative/0 positive
Re: Вытащить теги из XML
Божья_коровка

Сообщений: 25731
Дата регистрации: 23.08.2001
PavlikPavlikovich
Igor Korolyov
Из XML стоит выбирать данные используя XML парсер, а не функции разбора строк. и тем более не нудны никакие курсоры в которые зачем-то загоняется строковое представление этого самого xml-я
Я догадывался что делаю не так. Шел на это от безысходности. Не умею.
В таких случаях можно вытаскивать информацию из тега примерно вот так (просто пример) -

IF FILE(lcXmlFile)
xmlDoc = CreateObject("Msxml.DOMDocument")
xmlDoc.async = .F.
IF xmlDoc.Load(lcXmlFile)
node_List = xmlDoc.selectNodes('*//field[@name="NAME"]/field[@name="RU"]')
FOR intIndex = 1 TO node_List.Length
?UPPER(node_list.item(intIndex-1).text)
ENDFOR
ENDIF
ENDIF
У меня приходит портянка в XML, а из этой портянки требуется только инфа пары тегов, смысла парсить всю портянку нет, поэтому просто по тегам вытаскиваю.
На форуме вроде много было подобных вопросов.


------------------
Жись, она как зёбра, полоса белая, полоса черная, а мне всегда задница достается...




Исправлено 3 раз(а). Последнее : Божья_коровка, 25.01.21 17:15
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 20 (Гостей: 20)

© 2000-2024 Fox Club 
Яндекс.Метрика