|
02.04.2009, 08:36
|
#1
|
Мастер
Регистрация: 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
Принимаются пожелания по доработке и улучшению библиотеки. Пробуйте и отпишитесь о полученном результате.
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо odd за это полезное сообщение:
|
|
19.05.2009, 16:39
|
#2
|
AnyKey`щик
Регистрация: 18.05.2009
Сообщений: 2
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: 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> толька зная название самого тега...а не его расположение .....например если в цикле использовать))
|
(Offline)
|
|
19.05.2009, 16:40
|
#3
|
AnyKey`щик
Регистрация: 18.05.2009
Сообщений: 2
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Lib_xml - Разбиение XML/HTML документа
Есть еще какие-нибуть компоненты для парсинга ?
|
(Offline)
|
|
25.05.2009, 21:49
|
#4
|
Мастер
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений (для 713 пользователей)
|
Ответ: Lib_xml - Разбиение XML/HTML документа
Сообщение от PIRAT[E]
Есть еще какие-нибуть компоненты для парсинга ?
|
Есть ещё Lib_parse и там есть упрощенный алгоритм парсинга HTML страниц.
В нем все теги игнорируется. Извлекается только текст.
|
(Offline)
|
|
26.11.2009, 23:21
|
#5
|
ПроЭктировщик
Регистрация: 08.03.2009
Адрес: Saransk
Сообщений: 143
Написано 25 полезных сообщений (для 45 пользователей)
|
Ответ: Lib_xml - Разбиение XML/HTML документа
getvalue для param="123"/ возвращает 123", приходится проверять нет ли в конце / и обрубать его
__________________
|
(Offline)
|
|
27.11.2009, 01:28
|
#6
|
Мастер
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений (для 713 пользователей)
|
Ответ: Lib_xml - Разбиение XML/HTML документа
Ну, по правилам синтаксиса там пробел должен быть перед символом /.
Поэтому и глючит. Стоит доработать библиотеку чтоб этого не было?
|
(Offline)
|
|
15.12.2009, 11:31
|
#7
|
AnyKey`щик
Регистрация: 22.09.2009
Сообщений: 7
Написано одно полезное сообщение
|
Ответ: Lib_xml - Разбиение XML/HTML документа
Здравствуйте.
при разбивке xml, строка типа имя="значение", если "значение" состоит из строки с пробелами, разбивается по пробелам.
например...
имя="зн ач ен ие", выглядит так
имя="зн
ач
ен
ие"
можно ли это поправить?
|
(Offline)
|
|
15.12.2009, 19:32
|
#8
|
Разработчик
Регистрация: 16.08.2008
Адрес: Нижегородская провинция
Сообщений: 389
Написано 48 полезных сообщений (для 93 пользователей)
|
Ответ: Lib_xml - Разбиение XML/HTML документа
Сообщение от ksandr
Здравствуйте.
при разбивке xml, строка типа имя="значение", если "значение" состоит из строки с пробелами, разбивается по пробелам.
например...
имя="зн ач ен ие", выглядит так
имя="зн
ач
ен
ие"
можно ли это поправить?
|
Проблема и мне знакома. На сколько я знаю odd на данный момент борется с данным багом.
__________________
- Это мы накодили WINDOWS,
- Это мы надкусили APPLE,
- Нам играют живые The Beatles
- И нестареющий Вова Высоцкий...
|
(Offline)
|
|
17.12.2009, 22:11
|
#9
|
Мастер
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений (для 713 пользователей)
|
Ответ: Lib_xml - Разбиение XML/HTML документа
В данный момент работаю над совершенной новой версией парсера, приходится писать с нуля, так что немножко терпения...
|
(Offline)
|
|
09.01.2010, 08:34
|
#10
|
Нуждающийся
Регистрация: 04.10.2007
Сообщений: 64
Написано одно полезное сообщение
|
Ответ: Lib_xml - Разбиение XML/HTML документа
думаю дешевле научить MP работать с YAML, чем XML
|
(Offline)
|
|
12.01.2010, 01:19
|
#11
|
Мастер
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений (для 713 пользователей)
|
Ответ: Lib_xml - Разбиение XML/HTML документа
Исправленная версия библиотеки.
В частности исправлен баг когда в параметре тега встречался пробел.
|
(Offline)
|
|
12.01.2010, 20:04
|
#12
|
Разработчик
Регистрация: 16.08.2008
Адрес: Нижегородская провинция
Сообщений: 389
Написано 48 полезных сообщений (для 93 пользователей)
|
Ответ: Lib_xml - Разбиение XML/HTML документа
С новой библиотекой мидлет вешается , вертаю старую все встает на свои места.
__________________
- Это мы накодили WINDOWS,
- Это мы надкусили APPLE,
- Нам играют живые The Beatles
- И нестареющий Вова Высоцкий...
|
(Offline)
|
|
13.01.2010, 20:53
|
#13
|
Мастер
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений (для 713 пользователей)
|
Ответ: Lib_xml - Разбиение XML/HTML документа
Сообщение от GRAY_WOLF
С новой библиотекой мидлет вешается , вертаю старую все встает на свои места.
|
Пришли в личку пример XML на котором мидлет вешается, разберусь.
|
(Offline)
|
|
16.01.2010, 02:59
|
#14
|
Мастер
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений (для 713 пользователей)
|
Ответ: Lib_xml - Разбиение XML/HTML документа
Вроде бы нашел причину бага. Исправил.
В частности был исправлен баг с символом / в конце.
Иногда выдавало типа:
city="Moscow"/
вместо
city="Moscow"
|
(Offline)
|
|
16.01.2010, 20:11
|
#15
|
Разработчик
Регистрация: 16.08.2008
Адрес: Нижегородская провинция
Сообщений: 389
Написано 48 полезных сообщений (для 93 пользователей)
|
Ответ: Lib_xml - Разбиение XML/HTML документа
Если я что-то в чем-то понимаю, то тег <MMWEATHER> должен парсится(игрорироваться) весть, а в результате xml.getValue(adrr) выдает вот это MWEATHE хотя парсер должен был его игнорировать и выдать по заданному адресу только то, что в кавычках. Такое замечено на всех сайтах, где используется xml формат...
__________________
- Это мы накодили WINDOWS,
- Это мы надкусили APPLE,
- Нам играют живые The Beatles
- И нестареющий Вова Высоцкий...
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 17:01.
|