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::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>てそれらを反復処理します。eachfirst

于 2011-09-04T06:48:48.527 に答える