Разбор файла libxml-ruby и получение необходимой информации из xml
Я использую 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>
Как я могу получить значения api_key, токена синхронизации, last_synchronize_on из этой строки xml?
Как получить информацию о блокирующих узлах внутри блокирующего узла этой строки?
Спасибо
1 ответ
Вы бы использовали 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::Node
в api_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
,