1

我正在使用 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 值?

如何获取此字符串的阻塞节点内的阻塞节点的信息?

谢谢

4

1 回答 1

5

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

这给了你一个入口LibXML::XML::Nodeapi_key_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.

于 2011-09-04T06:48:48.527 回答