forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Библиотеки (http://forum.boolean.name/forumdisplay.php?f=124)
-   -   Lib_xml - Разбиение XML/HTML документа (http://forum.boolean.name/showthread.php?t=8099)

odd 02.04.2009 08:36

Lib_xml - Разбиение XML/HTML документа
 
Вложений: 2
Вот накропал библиотечку, которая немножко упрощает задачу парсинга (разбиения) XML/HTML документов.
Функции в библиотеке такие:
PHP код:

string comb(sstring) - Удалить из текста лишние символыТакие как переносытабуляция и проч.
    
Рекомендуется делать эту операцию перед разбиением документа.

parse(sstring) - Разбивает XML/HTML документ на массив значений

integer length 
Возвращает количество записей в массиве полученном в результате разбиения

clean 
Очистка массива

integer isParam
(sstringiinteger) - Проверкаявляется ли запись в массиве каким либо параметром (типа имя="значение")
    
номер записи в массиве
    s 
имя параметра
    Возвращаемые значения
:
    
даявляетсянет
    Нумерация записей идёт с 0.
    
string getName
(iinteger) - Получить имя из параметра (типа имя="значение")
    
номер записи
    Например
в массиве есть запись под номерм 3 со следующим значениемsrc="picture.png",
    
тогда оператор getName(3вернёт строчку "src" (без кавычек)
    
Нумерация записей идёт с 0.
    
string getValue
(iinteger) - Получить значение параметра (типа имя="значение")
    
номер записи
    Например
в массиве есть запись под номерм 3 со следующим значениемsrc="picture.png",
    
тогда оператор getValue(3вернёт строчку "picture.png" (без кавычек)
    
Нумерация записей идёт с 0.

string get
(iinteger) - Получить запись из массива под номером i
    Нумерация записей идёт с 0.

put
(sstringiinteger) - Помещает строку s в массив в элемент с индексом i 

Как видите, всё довольно просто. По функциям напоминает Lib_parse.
К библиотеке прилагаю пример применения либы в программе на MP.
Пример очень маленький, можете скопировать и отсюда:
PHP код:

Program xml_test;
Uses xml;
Var 
sstring;
Begin
    
// --------------------------- ИМИТАЦИЯ РЕАЛЬНОГО XML ДОКУМЕНТА ---------------------------------------
    
:= '<class>' chr(13) + chr(10);
    
:= '<student>' chr(13) + chr(10);
    
:= '<name>Вася Пупкин</name>' chr(13) + chr(10);
    
:= '<age>18</age>' chr(13) + chr(10);
    
:= '<phone type="home" mobile="no">1234567</phone>' chr(13) + chr(10);
    
:= '</student>' chr(13) + chr(10);
    
:= '<student>' chr(13) + chr(10);
    
:= '<name>Лена Головач</name>' chr(13) + chr(10);
    
:= '<age>16</age>' chr(13) + chr(10);
    
:= '<phone type="work" mobile="yes">1234567890</phone>' chr(13) + chr(10);
    
:= '</student>' chr(13) + chr(10);
    
:= '</class>' chr(13) + chr(10);
    
    
s:=xml.comb(s); // Удаляем лишние символы типа переносов
    
xml.parse(s); // Разбиваем документ
    
    
DrawText(xml.get(9), 55); // выводим для примера 9-тый элемент массива
    
DrawText(xml.getName(9), 525); // выводим для примера имя параметра
    
DrawText(xml.getValue(9), 545); // выводим для примера значение параметра
    
RepaintDelay(5000);
End

В итоге получим для такого тестового документа:
PHP код:

<class>
<
student>
<
name>Вася Пупкин</name>
<
age>18</age>
<
phone type="home" mobile="no">1234567</phone>
</
student>
<
student>
<
name>Лена Головач</name>
<
age>16</age>
<
phone type="work" mobile="yes">1234567890</phone>
</
student>
</class> 

Получим такой массив:
PHP код:

class
student
name
Вася Пупкин
/name
age
18
/age
phone
type
="home"
mobile="no"
1234567
/phone
/student
student
name
Лена Головач
/name
age
16
/age
phone
type
="work"
mobile="yes"
1234567890
/phone
/student
/class 

Принимаются пожелания по доработке и улучшению библиотеки. Пробуйте и отпишитесь о полученном результате.

PIRAT[E] 19.05.2009 16:39

Ответ: Lib_xml - Разбиение XML/HTML документа
 
а если в XML извесны толька теги, но не известно их расположение в массиве? Например:

<?xml version="1.0" encoding="UTF-8"?>
<data><phone></phone><name></name><info></info><address></address><program></program><code>OK_GET</code></data>

крута былобы еслиб можна было вытащить OK_GET из тегов <code></code> толька зная название самого тега...а не его расположение :).....например если в цикле использовать))

PIRAT[E] 19.05.2009 16:40

Ответ: Lib_xml - Разбиение XML/HTML документа
 
Есть еще какие-нибуть компоненты для парсинга ?

odd 25.05.2009 21:49

Ответ: Lib_xml - Разбиение XML/HTML документа
 
Цитата:

Сообщение от PIRAT[E] (Сообщение 105286)
Есть еще какие-нибуть компоненты для парсинга ?

Есть ещё Lib_parse и там есть упрощенный алгоритм парсинга HTML страниц.
В нем все теги игнорируется. Извлекается только текст.

Dj_Alex 26.11.2009 23:21

Ответ: Lib_xml - Разбиение XML/HTML документа
 
getvalue для param="123"/ возвращает 123", приходится проверять нет ли в конце / и обрубать его

odd 27.11.2009 01:28

Ответ: Lib_xml - Разбиение XML/HTML документа
 
Ну, по правилам синтаксиса там пробел должен быть перед символом /.
Поэтому и глючит. Стоит доработать библиотеку чтоб этого не было?

ksandr 15.12.2009 11:31

Ответ: Lib_xml - Разбиение XML/HTML документа
 
Здравствуйте.

при разбивке xml, строка типа имя="значение", если "значение" состоит из строки с пробелами, разбивается по пробелам.
например...
имя="зн ач ен ие", выглядит так
имя="зн
ач
ен
ие"

можно ли это поправить?

GRAY_WOLF 15.12.2009 19:32

Ответ: Lib_xml - Разбиение XML/HTML документа
 
Цитата:

Сообщение от ksandr (Сообщение 129713)
Здравствуйте.

при разбивке xml, строка типа имя="значение", если "значение" состоит из строки с пробелами, разбивается по пробелам.
например...
имя="зн ач ен ие", выглядит так
имя="зн
ач
ен
ие"

можно ли это поправить?

Проблема и мне знакома. На сколько я знаю odd на данный момент борется с данным багом.

odd 17.12.2009 22:11

Ответ: Lib_xml - Разбиение XML/HTML документа
 
В данный момент работаю над совершенной новой версией парсера, приходится писать с нуля, так что немножко терпения...

jkeks 09.01.2010 08:34

Ответ: Lib_xml - Разбиение XML/HTML документа
 
думаю дешевле научить MP работать с YAML, чем XML

odd 12.01.2010 01:19

Ответ: Lib_xml - Разбиение XML/HTML документа
 
Вложений: 1
Исправленная версия библиотеки.
В частности исправлен баг когда в параметре тега встречался пробел.

GRAY_WOLF 12.01.2010 20:04

Ответ: Lib_xml - Разбиение XML/HTML документа
 
С новой библиотекой мидлет вешается :''(( , вертаю старую все встает на свои места.

odd 13.01.2010 20:53

Ответ: Lib_xml - Разбиение XML/HTML документа
 
Цитата:

Сообщение от GRAY_WOLF (Сообщение 133235)
С новой библиотекой мидлет вешается :''(( , вертаю старую все встает на свои места.

Пришли в личку пример XML на котором мидлет вешается, разберусь.

odd 16.01.2010 02:59

Ответ: Lib_xml - Разбиение XML/HTML документа
 
Вложений: 1
Вроде бы нашел причину бага. Исправил.
В частности был исправлен баг с символом / в конце.
Иногда выдавало типа:
city="Moscow"/
вместо
city="Moscow"

GRAY_WOLF 16.01.2010 20:11

Ответ: Lib_xml - Разбиение XML/HTML документа
 
Если я что-то в чем-то понимаю, то тег <MMWEATHER> должен парсится(игрорироваться) весть, а в результате xml.getValue(adrr) выдает вот это MWEATHE хотя парсер должен был его игнорировать и выдать по заданному адресу только то, что в кавычках. Такое замечено на всех сайтах, где используется xml формат...


Часовой пояс GMT +4, время: 04:07.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot