【问题标题】:Ruby 2.2 Using REXMLRuby 2.2 使用 REXML
【发布时间】:2015-04-14 16:01:46
【问题描述】:

我学习了很多关于 Ruby 2.2 和 REXML 的教程。这是我的 xml 的一个示例:

<msg user='Karim'><body action='ChkUsername' r='0'><ver v='153' /></body></msg>

这是我目前拥有的代码:

        xml =    "<msg user='Karim'><body action='ChkUsername' r='0'><ver v='153' /></body></msg>"
        doc = Document.new xml
        puts doc.root.attributes[action]

那行不通。弹出一个错误。 #{classname} (NameError) 的未定义局部变量或方法“操作”

【问题讨论】:

    标签: ruby rexml


    【解决方案1】:

    您不能随意假设变量存在。标记action 将被解释为引用(例如,变量或方法调用),因为它不是字符串或符号。你没有那个变量或方法,所以你会得到一个错误,告诉你到底出了什么问题。

    puts doc.root.attributes['action']
    

    文档的根是&lt;msg&gt; 标记。 &lt;msg&gt; 标签没有有属性action。它有一个user 属性,可以按您的预期访问:

     > require 'rexml/document'
     > xml = "<msg user='Karim'><body action='ChkUsername' r='0'><ver v='153' /></body></msg>"
     > doc = REXML::Document.new(xml)
     > doc.root.attributes['user']
    => "Karim"
    

    action 属性进一步嵌套在文档中的&lt;body&gt; 元素中。

    有多种方法可以查询文档(顺便说一句,教程中都介绍了),例如,

     > doc.elements.each('//body') do |body|
     >   puts body.attributes['action']
     > end
    ChkUsername
    

    【讨论】:

    • 那我怎么调用action属性呢?
    • @Jad ...我是怎么告诉你答案的?
    • 哦,好吧,抱歉。这仍然为 #{classname} (NameError) 提供未定义的局部变量或方法“动作”
    • @Jad 那是不可能的; action 是我答案中代码中的直接字符串。
    • 这怎么可能?也许我没有正确访问该属性?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-03
    相关资源
    最近更新 更多