【问题标题】:Can I write inside a xml node using Ruby/Builder?我可以使用 Ruby/Builder 在 xml 节点中编写代码吗?
【发布时间】:2012-07-27 19:47:25
【问题描述】:

这是我的代码:

require 'builder'

def initXML(builder)
    builder.instruct!
    builder.results(:result => 'result'){}
end 
def writeXML(builder,name,hello)    
    builder.test(:name => name){
        builder.hello hello
        }
end 
builder = Builder::XmlMarkup.new(:target=> STDOUT, :indent=>4)
initXML(builder)
writeXML(builder,'name1','hello1')
writeXML(builder,'name2','hello2')

执行我得到这个 XML:

<?xml version="1.0" encoding="UTF-8"?>
<results result="result">
</results>
<test name="name1">
    <hello>hello1</hello>
</test>
<test name="name2">
    <hello>hello2</hello>
</test>

但我想在文件末尾添加&lt;/results&gt; 结束标记。有办法在&lt;results&gt; 节点内写入吗?或者将&lt;/results&gt; 移动到文件末尾?使用Nokogiri更好吗?还是手动生成我的 XML 更好?我正在尝试将它与 Watir 单元测试一起使用,我可以使用什么来将我的结果写入 XML 文件?

(更新)这就是我想要的 XML:

    <?xml version="1.0" encoding="UTF-8"?>
    <results result="result">    
    <test name="name1">
        <hello>hello1</hello>
    </test>
    <test name="name2">
        <hello>hello2</hello>
    </test>
    </results>

谢谢。

【问题讨论】:

    标签: ruby xml watir builder


    【解决方案1】:

    它准确地写出你告诉它的东西。

    将一个块传递给initXML(在惯用的Ruby,IMO中为init_xml)并执行它。但我不会称它为init_xml,因为您实际上在做的是包装 XML 内容。

    我不确定您要完成什么;使用普通的构建器语义很容易做到这一点。如果您想从方法返回 XML 节点,可以考虑将当前节点传递给方法。如果不确切地知道您要做什么,就很难提出建议。

    【讨论】:

    • @Marcelo 我们了解您想要的 XML,我在问您想通过使用这些方法来完成什么。在您给出的示例中,没有太多理由使用它们;它本质上与使用普通构建器一样短。
    • 我想使用 test/unit 在 Watir 上运行我的测试,在每个测试中我想在 XML 中写入结果和其他东西,调用我的方法,但是当我把标签 &lt;results&gt; ,生成器自动关闭标签,我想写标签,把结果写在&lt;results&gt;里面的标签里,然后在测试结束时用&lt;/results&gt;关闭。我m new on Ruby and I dont 知道我是否可以使用 builder 来做到这一点。
    • ci_reporter 将自动创建 xml 报告:github.com/nicksieger/ci_reporter
    猜你喜欢
    • 2015-11-03
    • 2020-06-15
    • 1970-01-01
    • 2021-01-02
    • 2023-03-07
    • 2011-06-23
    • 1970-01-01
    • 2013-08-27
    • 1970-01-01
    相关资源
    最近更新 更多