【发布时间】:2015-07-03 06:07:11
【问题描述】:
我有一个如下所示的字符串:
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>"
我的目标是能够通过解析读出每个大写的顶层。我使用case 语句来评估什么是顶级键,例如<SETPROFILE>,但可以有很多不同的值,然后运行一个方法,对标签的内容执行不同的操作。
这意味着我需要能够非常容易地知道:
-
top_level_keys = ['SET-TOPIC', 'SET-PROFILE', 'SET-PROFILE'] - 当我传入密钥时,知道完整值
parsed[0].value = {:PROFILE-KEY => predicates_live, :PROFILE-VALUE => yes}parsed[0].key = ['SET-TOPIC']
我目前解析整个字符串如下:
doc = Nokogiri::XML::DocumentFragment.parse(string)
parsed = doc.search('*').each_with_object({}){ |n, h|
h[n.name] = n.text
}
因此,我只解析并知道第二个标签。第一个标记中的值不会显示在 parsed 变量中。
如果有帮助,我可以控制标签是什么。
但是我需要能够解析并知道两个标签的内容作为解析的结果,因为我需要为节点的每个实例应用一个方法。
注意:字符串也只包含常规文本,包括在类似 XML 的标记之前、中间和之后。
【问题讨论】: