我使用libxml-ruby gem来读取xml字符串。
我无法从xml字符串中提取所需信息。
目前我有以下xml
<?xml version="1.0" encoding="utf-8"?>
<message>
<head>
<api_key>252f5df2df522fg5fd25df2df5df2fd5</api_key>
<user>123</user>
<secret>********************</secret>
<signature>****************</signature>
<synchronization token="kj0s09ew090mv904v09409905b" last_synchronize_on="2010-01-02 11:30" />
</head>
<blockings>
<blocking token="AAA" start_time="2010-01-01 10:00" end_time="2010-01-01 12:00" method="REQUEST" is_forced="FALSE" />
<blocking token="BBB" start_time="2010-01-03 15:00" end_time="2010-01-03 18:00" method="REQUEST" is_forced="FALSE" />
</blockings>
</message>
如何从此xml字符串中获取api_key,同步令牌,last_synchronize_on值?
如何获取此字符串的阻塞节点内的阻塞节点的信息?
由于
答案 0 :(得分:4)
您使用LibXML::XML::Parser获取LibXML::XML::Document:
p = LibXML::XML::Parser.file(xml_file)
# or p = LibXML::XML::Parser.string(xml_string)
doc = p.parse
然后使用find
和一些XPath来查找节点:
api_key_node = doc.find('//api_key').first
这会在api_key_node
中为您提供LibXML::XML::Node
,因此您可以致电content
以获得所需内容:
api_key = api_key_node.content
# "252f5df2df522fg5fd25df2df5df2fd5"
类似的东西适用于同步,但您使用[]
来访问属性值:
sync = doc.find('//synchronization').first
token = sync['token']
last_sync = sync['last_syncrhonize_on']
对<blocking>
个节点再次进行相同处理,但您使用each
而不是first
进行迭代。