是否可以使用Haml生成普通的XML?

时间:2010-05-10 18:38:07

标签: ruby-on-rails xml ruby haml builder

我一直在研究一个软件,我需要生成一个自定义XML文件以发送回客户端应用程序。 Ruby / Rails世界上用于生成XML文件的当前解决方案充其量是缓慢的。使用构建器或事件Nokogiri,虽然具有良好的语法和可维护的解决方案,但它们会消耗太多时间和处理。

我绝对可以去ERB,它提供了一个很好的速度,而不是手工构建整个XML。

HAML是一个很棒的工具,具有良好而直接的语法并且相当快。但我正在努力使用它来构建纯XML文件。这让我想知道,它有可能吗?

是否有人对某些代码或文档有一些指示,说明如何执行此操作,从HAML构建完整,有效的XML?

7 个答案:

答案 0 :(得分:36)

在HAML中执行XML非常简单,只需使用以下命令启动模板即可:

!!! 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_

答案 1 :(得分:8)

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

通过haml

运行它
haml hamltest.haml test.xml

在浏览器中打开文件

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

HAML参考讨论了html标签并给出了一些例子。 HAML reference

答案 2 :(得分:3)

这展示了一些可用于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 reference上的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"

答案 3 :(得分:1)

Haml可以像HTML一样轻松地生成XML(我已经将它用于FBML和XHTML)。你有什么问题?

答案 4 :(得分:0)

我没有使用HAML,但是如果你无法使用它,则另一个选项是Builder

答案 5 :(得分:-1)

如何创建xml标头,例如&lt;?xml version =“1.0”encoding =“UTF-8”?&gt;  ?

答案 6 :(得分:-3)

应该可以。毕竟,您可以使用记事本创建普通的旧XML。