使用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