Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Ruby解析包含多个类似XML的标记的字符串_Ruby_Xml_Parsing_Nokogiri - Fatal编程技术网

使用Ruby解析包含多个类似XML的标记的字符串

使用Ruby解析包含多个类似XML的标记的字符串,ruby,xml,parsing,nokogiri,Ruby,Xml,Parsing,Nokogiri,我有一个字符串,如下所示: string = " <SET-TOPIC>INITIATE</SET-TOPIC> <SETPROFILE> <PROFILE-KEY>predicates_live</PROFILE-KEY> <PROFILE-VALUE>yes</PROFILE-VALUE> </SETPROFILE> <think&g

我有一个字符串,如下所示:

   string = " <SET-TOPIC>INITIATE</SET-TOPIC>

    <SETPROFILE>
      <PROFILE-KEY>predicates_live</PROFILE-KEY>
      <PROFILE-VALUE>yes</PROFILE-VALUE>
    </SETPROFILE>

    <think>
      <set><name>first_time_initiate</name>yes</set>
    </think>

    <SETPROFILE>
      <PROFILE-KEY>first_time_initiate</PROFILE-KEY>
      <PROFILE-VALUE>YES</PROFILE-VALUE>
    </SETPROFILE>"
因此,我只解析并知道第二个标记。第一个标记中的值不会显示在
已解析的
变量中

如果有帮助的话,我可以控制标签是什么

但是我需要能够解析并知道作为解析结果的两个标记的内容,因为我需要为节点的每个实例应用一个方法


注意:字符串也只包含常规文本,在类XML标记之前、之间和之后。

这取决于您要实现的目标。问题是您正在用新值覆盖哈希键。收集值的最简单方法是将它们存储在数组中:

parsed = doc.search('*').each_with_object({}) do |n, h| 
  # h[n.name] = n.text :: removed because it overrides values
  (h[n.name] ||= []) << n.text 
end
parsed=doc.search('*')。每个带有_对象({})的_都做| n,h |
#h[n.name]=n.text::已删除,因为它覆盖了值

谢谢。如果我们删除覆盖并创建一个数组就可以了。这样做有什么坏处吗?我的目标是能够有一个方法,可以解析每个不同的标记并应用该方法。然后,不同的节点获取解析的值,应用适当的方法,然后从字符串中去掉标记或根据方法替换它。我得到一个错误:
TypeError:没有将符号隐式转换为整数
我们是否要将散列转换为数组?我想我已经解决了这个问题——但重点回到了您最初的问题,我想实现什么。让我更新一下描述。
parsed = doc.search('*').each_with_object({}) do |n, h| 
  # h[n.name] = n.text :: removed because it overrides values
  (h[n.name] ||= []) << n.text 
end