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

问题描述 投票:11回答:7

我一直在开发一个软件,在这个软件中,我需要生成一个自定义的XML文件,然后发回给客户应用程序。目前RubyRails世界上生成XML文件的解决方案最多只能说是缓慢。使用builder或event Nokogiri,虽然有一个很好的语法和可维护的解决方案,但它们消耗了太多的时间和处理。

我当然可以使用ERB,它提供了一个很好的速度,但代价是需要手工构建整个XML。

HAML 是一个伟大的工具,有一个很好的和直接的语法,而且速度相当快。但我很难用它来建立纯XML文件。这让我想知道,这是否可能?

有没有人有一些指向性的代码或文档来展示如何做到这一点,从HAML建立一个完整的,有效的XML?

ruby-on-rails xml ruby haml builder
7个回答
37
投票

在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.infodocsyardocfile.REFERENCE.html#doctype_。


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

贯穿

haml hamltest.haml test.xml

浏览器打开文件

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

HAML参考资料介绍了html标签,并给出了一些例子。HAML参考资料


4
投票

这演示了一些对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.coma967065498594。

或者在rails之外使用。

>> Haml::Engine.new("%tag{:name => 'value'}", :attr_wrapper => '"').to_html
=> "<tag name=\"value\"></tag>\n"

1
投票

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


0
投票

我没有使用过HAML,但如果你不能使它工作,另一个选择是 建设者.


-1
投票

那创建xml头呢,比如<?xml版本="1.0" encoding="UTF-8"?> ?


-3
投票

应该是可以的。毕竟你可以用记事本创建普通的XML。

© www.soinside.com 2019 - 2024. All rights reserved.