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

lsd*_*sdr 10 ruby xml haml ruby-on-rails builder

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

我绝对可以去ERB,它以牺牲手工构建整个XML为代价提供了很好的速度.

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

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

phi*_*oye 36

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

!!! XML
Run Code Online (Sandbox Code Playgroud)

哪个产生

<?xml version='1.0' encoding='utf-8' ?>
Run Code Online (Sandbox Code Playgroud)

然后正如@beanish先前所说,你"编造自己的标签":

%test
  %test2 hello
  %item{:name => "blah"}
Run Code Online (Sandbox Code Playgroud)

要得到

<test>
  <test2>hello</test2>
  <item name='blah'></item>
</test>
Run Code Online (Sandbox Code Playgroud)

更多:http: //haml.info/docs/yardoc/file.REFERENCE.html#doctype_


Bea*_*ish 8

%test
  %test2 hello
  %item{:name => "blah"}
Run Code Online (Sandbox Code Playgroud)

通过haml运行它

haml hamltest.haml test.xml
Run Code Online (Sandbox Code Playgroud)

在浏览器中打开文件

<test>
  <test2>hello</test2>
  <item name='blah'></item>
</test>
Run Code Online (Sandbox Code Playgroud)

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


Kel*_*vin 6

这演示了一些对 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'}
Run Code Online (Sandbox Code Playgroud)

输出:

<?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>
Run Code Online (Sandbox Code Playgroud)

查看haml 参考上的 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"
Run Code Online (Sandbox Code Playgroud)