Сейчас на форуме: UniSoft, laslo, bartolomeo (+5 невидимых)

 eXeL@B —› Программирование —› XML парсер для MASM
Посл.ответ Сообщение


Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 01 октября 2011 00:47
· Личное сообщение · #1

Посоветуйте XML парсер для masm. Что нашел:
XML Parser by gabor
Парсер на основе конечных автоматов (FInite State Machine) - очень понравился, но не парсит мой XML документ, т.к. в нем встречается селектор вида <sample selector/> а в состояниях такого не задано. Как отредактировать состояния машины я так и не вкурил, 2 часа потратил.

AsmXml by Marc Kerbiquet
Мощный XML парсер, написаный на асме, только почему то под ЯВУ. Не проблема, сконвертил заголовки, собрал либу, но... После разбора семплов и чтения доков стало ясно, что парсит он только по простым схемам (simple schema), как задать схему, для вариативного XML я так и не понял. Для функции ax_parse последним параметром можно указать реакцию на неизвестный токен, но даже при FALSE значении парсить функа отказывается.
Например XML файл такого вида:
<?xml version="1.0" encoding="windows-1251" ?>
<Param1>
<Param2>1</Param2>
</Param1>
<Main>
<Main1>Hello</Main1>
</Main>

Вот как сказать парсеру в виде схемы, что коллекция Main присутствует всегда, а всё остальное может и не быть я так и не понял, может кто шарит в схемах?

Ну а в идеале была бы библиотека, которая бы просто парсила токены, как библиотека от gabor, а решение, нужен элемент или нет, оставляла бы программисту.

-----
Yann Tiersen best and do not fuck





Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 01 октября 2011 14:12
· Личное сообщение · #2

Вопрос снят, после долгого дебага AsmXml стало понятно, что подглючивает обработка схемы. Удалось составить схему, с которой XML документ парсится. Тему не закрываю, может кто что добавит когда нибудь.

-----
Yann Tiersen best and do not fuck





Ранг: 527.7 (!), 381thx
Активность: 0.160.09
Статус: Участник
Победитель турнира 2010

Создано: 01 октября 2011 14:20
· Личное сообщение · #3

http://coderesearchlabs.com/rawxmllibrary

-----
127.0.0.1, sweet 127.0.0.1





Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 01 октября 2011 15:00
· Личное сообщение · #4

Я с фасмом не дружу, может кто скомпилит это в obj или lib?

-----
Yann Tiersen best and do not fuck




Ранг: 3.3 (гость)
Активность: 0=0
Статус: Участник

Создано: 01 октября 2011 15:58
· Личное сообщение · #5

в таком виде пойдет?

e66a_01.10.2011_EXELAB.rU.tgz - rxl.rar




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 01 октября 2011 17:02
· Личное сообщение · #6

JokeInMe спасибо, но пока хз как проверить. Я видимо очень туп, но где там прототипы хоть для какой из поддерживаемых платформ? В сорсах?

-----
Yann Tiersen best and do not fuck




Ранг: 3.3 (гость)
Активность: 0=0
Статус: Участник

Создано: 01 октября 2011 17:30
· Личное сообщение · #7

PE_Kill в папке "tests" есть примеры вызова.




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 01 октября 2011 17:50
· Личное сообщение · #8

Ага, но только для записи, а вот для чтения нихера нет. Поизвращался с получением имени первого нода:

<Test>123</Test>

Пытаемся получить имя "Test":
getXmlNodeName, ADDR Buffer, ADDR TestXML

В отладчике видно, что нод найден на позиции 1. Ищется закрывающийся нод, только почему то с самого начала, встречается открывающаяся скобка и - ошибка. Вот тебе и квест, получи имя нода. Либо я ничего не понял, либо это кривейшая библиотека по работе с XML. На создание XML файлов - да, она работает, а вот как с ее помощью читать...

-----
Yann Tiersen best and do not fuck




Ранг: 3.3 (гость)
Активность: 0=0
Статус: Участник

Создано: 02 октября 2011 14:28
· Личное сообщение · #9

как я понял, да, у него плохо развито чтение.

getXmlNodeName buffer,node - выдает NodeName из строки node, содержащая полностью Node(заканчивающаяся нулем) значение в buffer
getXmlNodeValue buffer,node - выдает Value из строки node, содержащая полностью Node(заканчивающаяся нулем) значение в buffer
т.е. Node должен быть вида:
Node db '<Test>123</Test>',0

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

добавил еще вызов для теста:
getXmlNodeValue2, ADDR Buffer, ADDR XMLdoc, ADDR TestXML - считывает значение node с именем TestXML со содержимого файла xml, помещенного в память в буффер
Buffer - сюда помещается значение
XMLdoc - считанный xml файл
TestXML - имя node, значение которого хотим считать.
TestXML db 'Test',0

1597_02.10.2011_EXELAB.rU.tgz - rxl2.rar




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 02 октября 2011 17:11 · Поправил: PE_Kill
· Личное сообщение · #10

Не, ну нафиг, это уже не серьезно. Адаптировал Asm Xml работает очень быстро, конвертирует xml в связный список классов, сам контролирует буферы, подробно описывает произошедшую ошибку и многое другое. А это так, какой то набор функций для поиска строк, да еще и недоделанный, хотя и версия вон какая.

-----
Yann Tiersen best and do not fuck




Ранг: 7.7 (гость), 51thx
Активность: 0.010
Статус: Участник

Создано: 11 октября 2011 15:32
· Личное сообщение · #11

а почему не использовать от MS? xmllite.dll




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 11 октября 2011 15:46
· Личное сообщение · #12

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

-----
Yann Tiersen best and do not fuck




Ранг: 72.1 (постоянный), 30thx
Активность: 0.050
Статус: Участник

Создано: 11 октября 2011 19:00
· Личное сообщение · #13

PE_Kill пишет:
Адаптировал Asm Xml работает очень быстро, конвертирует xml в связный список классов, сам контролирует буферы, подробно описывает произошедшую ошибку и многое другое.

Можно попросить выложить исправленную версию? Да и автору отписать наверняка стоит.


 eXeL@B —› Программирование —› XML парсер для MASM
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати