for flooders
:: Главная :: Решения :: Статьи :: Сайт М. Дроздова :: Файловый архив :: Книга по VFP 9 :: Русский Help Online :: OFF-LINE Форум
   Лисоводы   всех   стран,  объединяйтесь !!!  

Список Форумов  :: Visual Foxpro, Foxpro for DOS
  

Вытащить теги из XML
PavlikPavlikovich
Автор

Сообщений: 151
Дата: 22.01.21 14:29:26
Здравствуйте!
на форуме много информации по этому поводу. Но я не могу сообразить как мне это применить. Кому не жалко, помогите!
Нужно их 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) не работает. Режет не верно. Такое ощущение что это и не символы вовсе у меня в курсоре. Либо пробелы какие-то мешают.
Я уже понимаю что пошёл не той дорогой. Помогите пожалуйста.



Исправлено: PavlikPavlikovich, 22.01.21 14:30
Ratings: 0 negative/0 positive

Re: Вытащить теги из XML
ssa

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


------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/1 positive

Re: Вытащить теги из XML
PavlikPavlikovich
Автор

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

Re: Вытащить теги из XML
of63

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

Re: Вытащить теги из XML
Simple777

Сообщений: 30063
Дата: 22.01.21 15:05:07
Ещё могут быть какие-нибудь невидимые символы,влияющие на работу VFP.
Ratings: 0 negative/0 positive

Re: Вытащить теги из XML
PavlikPavlikovich
Автор

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

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

Re: Вытащить теги из XML
of63

Сообщений: 20844
Откуда: Н.Новгород
Дата: 22.01.21 17:23:30
? 0h + vr2.pole2 && посмотреть строку побайтно, начиная с левого (младшего) байта
Ratings: 0 negative/0 positive

Re: Вытащить теги из XML
PavlikPavlikovich
Автор

Сообщений: 151
Дата: 22.01.21 20:30:09
Я не понял почему так, но почему-то у меня сработало вот так. Всё получилось.
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 ом выдернуть то что нужно, но получаю пустую таблицу.  



Исправлено: PavlikPavlikovich, 22.01.21 20:31
Ratings: 0 negative/0 positive

Re: Вытащить теги из XML
akvvohinc

Сообщений: 3190
Откуда: Москва
Дата: 22.01.21 23:54:38
Цитата:
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



Исправлено: akvvohinc, 22.01.21 23:55
Ratings: 0 negative/0 positive

Re: Вытащить теги из XML
Igor Korolyov

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


------------------
WBR, Igor
Ratings: 0 negative/1 positive

Re: Вытащить теги из XML
PavlikPavlikovich
Автор

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

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

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

Re: Вытащить теги из XML
Simple777

Сообщений: 30063
Дата: 23.01.21 14:39:46
PavlikPavlikovich
Не умею.

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

Надо только грамотно поставить вопрос.
Ratings: 0 negative/0 positive

Re: Вытащить теги из XML
Божья_коровка

Сообщений: 24282
Дата: 25.01.21 17:12:43
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, а из этой портянки требуется только инфа пары тегов, смысла парсить всю портянку нет, поэтому просто по тегам вытаскиваю.
На форуме вроде много было подобных вопросов.


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




Исправлено: Божья_коровка, 25.01.21 17:15
Ratings: 0 negative/0 positive



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

On-line: 7 AndyNigmatec Igor Korolyov  (Гостей: 5)


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