Вот накропал библиотечку, которая немножко упрощает задачу парсинга (разбиения) 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
Принимаются пожелания по доработке и улучшению библиотеки. Пробуйте и отпишитесь о полученном результате.