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>

所有文本都在一行中,没有空格。我无法编写正确的正则表达式模式。我想要得到像<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 回答