11

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

我绝对可以使用 ERB,它以手动构建整个 XML 为代价提供了很好的速度。

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

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

4

7 回答 7

38

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

于 2010-07-11T13:11:01.993 回答
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 参考

于 2010-05-10T18:55:48.107 回答
5

这展示了一些对 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参考上的 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"
于 2012-07-06T18:02:31.263 回答
1

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

于 2010-05-11T01:26:52.030 回答
0

我没有使用过 HAML,但如果你不能让它工作,另一个选择是Builder

于 2010-05-11T01:30:04.637 回答
-1

如何创建 xml 标头,例如 <?xml version="1.0" encoding="UTF-8"?> ?

于 2010-06-24T14:27:07.487 回答
-3

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

于 2010-05-10T18:42:14.020 回答