Показать сообщение отдельно
Старый 02.04.2009, 08:36   #1
odd
Мастер
 
Аватар для odd
 
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений
(для 713 пользователей)
Радость Lib_xml - Разбиение XML/HTML документа

Вот накропал библиотечку, которая немножко упрощает задачу парсинга (разбиения) XML/HTML документов.
Функции в библиотеке такие:
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.
Пример очень маленький, можете скопировать и отсюда:
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
В итоге получим для такого тестового документа:
<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> 
Получим такой массив:
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 
Принимаются пожелания по доработке и улучшению библиотеки. Пробуйте и отпишитесь о полученном результате.
Вложения
Тип файла: zip Lib_xml.zip (2.0 Кб, 766 просмотров)
Тип файла: zip xml_test.zip (3.4 Кб, 793 просмотров)
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо odd за это полезное сообщение:
GRAY_WOLF (06.04.2009), Rock2roll (05.08.2010)