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_
%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参考
这演示了一些对 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)
归档时间: |
|
查看次数: |
5246 次 |
最近记录: |