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

Вот накропал библиотечку, которая немножко упрощает задачу парсинга (разбиения) XML/HTML документов.
Функции в библиотеке такие:
string comb(s: string) - Удалить из текста лишние символы. Такие как переносы, табуляция и проч.
    
Рекомендуется делать эту операцию перед разбиением документа.

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

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

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

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

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

put
(s: string; i: integer) - Помещает строку s в массив в элемент с индексом i 
Как видите, всё довольно просто. По функциям напоминает Lib_parse.
К библиотеке прилагаю пример применения либы в программе на MP.
Пример очень маленький, можете скопировать и отсюда:
Program xml_test;
Uses xml;
Var 
s: string;
Begin
    
// --------------------------- ИМИТАЦИЯ РЕАЛЬНОГО XML ДОКУМЕНТА ---------------------------------------
    
s := '<class>' + chr(13) + chr(10);
    
s := s + '<student>' + chr(13) + chr(10);
    
s := s + '<name>Вася Пупкин</name>' + chr(13) + chr(10);
    
s := s + '<age>18</age>' + chr(13) + chr(10);
    
s := s + '<phone type="home" mobile="no">1234567</phone>' + chr(13) + chr(10);
    
s := s + '</student>' + chr(13) + chr(10);
    
s := s + '<student>' + chr(13) + chr(10);
    
s := s + '<name>Лена Головач</name>' + chr(13) + chr(10);
    
s := s + '<age>16</age>' + chr(13) + chr(10);
    
s := s + '<phone type="work" mobile="yes">1234567890</phone>' + chr(13) + chr(10);
    
s := s + '</student>' + chr(13) + chr(10);
    
s := s + '</class>' + chr(13) + chr(10);
    
    
s:=xml.comb(s); // Удаляем лишние символы типа переносов
    
xml.parse(s); // Разбиваем документ
    
    
DrawText(xml.get(9), 5, 5); // выводим для примера 9-тый элемент массива
    
DrawText(xml.getName(9), 5, 25); // выводим для примера имя параметра
    
DrawText(xml.getValue(9), 5, 45); // выводим для примера значение параметра
    
Repaint; Delay(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 Кб, 1103 просмотров)
Тип файла: zip xml_test.zip (3.4 Кб, 1105 просмотров)
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо odd за это полезное сообщение:
GRAY_WOLF (06.04.2009), Rock2roll (05.08.2010)