0

私は以下のような文字列xmlを持っています:

<Query>
  <Code>USD</Code>
  <Description>United States Dollars</Description>
  <UpdateTime>2013-03-04 02:27:33</UpdateTime>
  <toUSD>1</toUSD>
  <USDto>1</USDto>
  <toEUR>2</toEUR>
  <EURto>3</EURto>
</Query>

すべてのテキストは空白なしで1行になります。正しい正規表現パターンを書くことができません。のように始まるノードを取得したい<to。たとえば<toEUR><toUSD>

このパターンはどのように書くべきですか?

4

2 に答える 2

0

nokogiri と xpath 関数を使用starts-with:

require 'nokogiri'
doc = Nokogiri::XML <<EOF
<Query>
  <Code>USD</Code>
  <Description>United States Dollars</Description>
  <UpdateTime>2013-03-04 02:27:33</UpdateTime>
  <toUSD>1</toUSD>
  <USDto>1</USDto>
  <toEUR>2</toEUR>
  <EURto>3</EURto>
</Query>
EOF

doc.search('//*[starts-with(name(),"to")]').map &:to_s
#=> ["<toUSD>1</toUSD>", "<toEUR>2</toEUR>"]
于 2013-03-05T05:46:20.390 に答える
-1

一般的なコンセンサスは、正規表現を使用して xml などを解析する方法ではないということですが、次のような方法でうまくいくはずです。

<\s*(to[^>\s]+)[^>]*>([^<]+)<\s*/\s*\1\s*>

ルビー形式:

/<\s*(to[^>\s]+)[^>]*>([^<]+)<\s*\/\s*\1\s*>/

一致<toWatever>value</toWhatever>する後方参照グループ 1 は名前 (toWhatever) を返し、後方参照グループ 2 は値を返します。

于 2013-03-04T22:48:22.097 に答える