Можно ли сгенерировать простой старый XML с помощью Haml? - PullRequest
10 голосов
/ 10 мая 2010

Я работал над программным обеспечением, в котором мне нужно было создать собственный XML-файл для отправки обратно клиентскому приложению. Современные решения в мире Ruby / Rails для генерации XML-файлов в лучшем случае медленные. Использование компоновщика или события Nokogiri, хотя и имеет приятный синтаксис и является обслуживаемым решением, они занимают слишком много времени и обработки.

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

HAML - отличный инструмент, имеет приятный и понятный синтаксис и довольно быстрый. Но я изо всех сил пытаюсь создать чистые файлы XML, используя его. Что заставляет меня задуматься, возможно ли это вообще?

Есть ли у кого-нибудь указатели на какой-то код или документы, показывающие, как это сделать, создать полный действительный XML из HAML?

Ответы [ 7 ]

36 голосов
/ 11 июля 2010

Создать XML в HAML легко, просто запустите ваш шаблон с:

!!! XML

, который производит

<?xml version='1.0' encoding='utf-8' ?>

Тогда, как @beanish сказал ранее, вы «создаете свои собственные теги»:

%test
  %test2 hello
  %item{:name => "blah"}

чтобы получить

<test>
  <test2>hello</test2>
  <item name='blah'></item>
</test>

Подробнее: http://haml.info/docs/yardoc/file.REFERENCE.html#doctype_

8 голосов
/ 10 мая 2010
%test
  %test2 hello
  %item{:name => "blah"}

запустить его через хамл

haml hamltest.haml test.xml

открыть файл в браузере

<test>
  <test2>hello</test2>
  <item name='blah'></item>
</test>

Справочник HAML рассказывает о тегах html и дает несколько примеров. HAML ссылка

3 голосов
/ 06 июля 2012

Это демонстрирует некоторые вещи, которые могут быть полезны для документов XML:

!!! XML
%root{'xmlns:foo' => 'http://myns'}
  -# Note: :dashed-attr is invalid syntax
  %dashed-tag{'dashed-attr' => 'value'} Text
  %underscore_tag Text
  - ['apple', 'orange', 'pear'].each do |fruit|
    - haml_tag(fruit, "Yummy #{fruit.capitalize}!", 'fruit-code' => fruit.upcase)
  %foo:nstag{'foo:nsattr' => 'value'}

Выход:

<?xml version='1.0' encoding='utf-8' ?>
<root xmlns:foo='http://myns'>
  <dashed-tag dashed-attr='value'>Text</dashed-tag>
  <underscore_tag>Text</underscore_tag>
  <apple fruit-code='APPLE'>Yummy Apple!</apple>
  <orange fruit-code='ORANGE'>Yummy Orange!</orange>
  <pear fruit-code='PEAR'>Yummy Pear!</pear>
  <foo:nstag foo:nsattr='value'></foo:nstag>
</root>

Посмотрите на ссылку Haml :: Helpers в справке по хамлу , чтобы узнать больше о таких методах, как haml_tag.

Если вы хотите использовать двойные кавычки для атрибутов,

См .: https://stackoverflow.com/a/967065/498594

Или за пределами использования рельсов:

>> Haml::Engine.new("%tag{:name => 'value'}", :attr_wrapper => '"').to_html
=> "<tag name=\"value\"></tag>\n"
1 голос
/ 11 мая 2010

Haml может производить XML так же легко, как HTML (я использовал его для FBML и XHTML). Какие у вас проблемы?

0 голосов
/ 24 июня 2010

как насчет создания заголовка xml, например <? xml version = "1.0" encoding = "UTF-8"?>

0 голосов
/ 11 мая 2010

Я не использовал HAML, но если вы не можете заставить его работать, другой вариант - Builder .

0 голосов
/ 10 мая 2010

Это должно быть возможно. В конце концов вы можете создать простой старый XML с помощью Блокнота.

...