Вопрос

Я пишу приложение Lua, которое генерирует канал Atom.Прямо сейчас я генерирую XML «вручную» — записываю строки в файлы.

Это не кажется лучшим способом, хотя может быть и так.Я начинаю нервничать из-за того, что побег прошел правильно.Кто-нибудь раньше делал что-нибудь подобное в Lua?

Должен ли я придерживаться генерации «вручную»?Или написать оболочку для существующей библиотеки C?

(Perl, для сравнения, кажется, имеет множество вариантов.)

Это было полезно?

Решение 2

Теперь у меня есть еще один ответ на мой вопрос:Я написал привязки Lua для XML-генератор Тима Брея, Genx.

Вот его домашняя страница;вот проект на Bitbucket.На данный момент это неполная привязка, но она работает для простых задач:

require 'genx'
d = genx.new(io.stdout)

d:startElement('farm')

d:startElement('crop')
d:attribute('type', 'fruit')
d:text('Apricots')
d:endElement()

d:startElement('crop')
d:attribute('type', 'vegetable')
d:text('Zucchini')
d:endElement()

d:endElement()

Производит:

<farm><crop type="fruit">Apricots</crop><crop type="vegetable">Zucchini</crop></farm>

Лично я считаю, что с таким «потоковым» интерфейсом работать немного приятнее, чем с древовидным интерфейсом генерации.

Другие советы

Я тоже создал XML вручную.Я создал API, который выглядит так:

function XmlElement(tag, text, attr)
    ...
end

function XmlSubelement(root, tag, text, attr)
    ...
end

Затем, чтобы использовать его:

local root = XmlElement("Level0")
XmlSubelement(root, "Level1", "some text")
XmlSubelement(root, "Level1", "some more text")

local s = root:tostring()

Кода у меня больше нет, но он умещается на одном экране, включая цитирование.

Для Lua также существуют различные библиотеки сохранения данных, многие из них описаны на странице Вики пользователя Luaстраница на XML есть информация, которая может помочь.

Хорошие люди в проект Кеплер иметь генераторы HTML, которые можно использовать для создания действительного XML. (Мертвая ссылка.)

А также есть космо который представляет собой обобщенную структуру шаблонов, которую можно использовать для генерации XML (помимо прочего).

Редактировать:

Я понимаю беспокойство по поводу шаблонов, которые не обязательно гарантируют, что выходные данные останутся правильно сформированными.Я почти уверен, что авторы Cosmo были бы недовольны, если бы правильно сформированный шаблон когда-либо приводил к неправильному форматированию документа, но все еще остается проблема правильного цитирования содержимого.В тех контекстах, где я его использовал, для меня это не было проблемой, но я также не работал с ненадежным исходным текстом.

На LuaForge также опубликованы проекты, которые могут быть полезны:

  • Дерево элементов Lua сопоставляет XML-документ с деревом таблиц и обратно.Он использует Expat для чтения и утверждает, что генерирует действительный XML при записи.

  • LuaSOAP Включает генерацию и анализ XML, достаточные для транзакций SOAP.Если вы решите написать свой собственный генератор, это может стать хорошей отправной точкой для ограниченного диалекта, такого как RSS или ATOM.

Кроме того, я знаю, что видел проект, в котором реализована полная DOM для HTML-документов и поддерживается как анализ, так и генерация документов, но я не могу вспомнить его название или найти его сегодня на LuaForge.

Редактировать 2: Вот еще один пакет, который я раньше не заметил, хотя он включен в Луа для Windows: ЛуаXML.Он сопоставляет XML и гнездо таблиц Lua и может как читать, так и записывать XML.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top