В проекте Ruby я работаю с плохо сформированным xml-файлом, полученным из внешнего источника.Я хочу только одно значение;атрибут скорости узла последней записи.XML выглядит следующим образом (я сократил его для удобства чтения)
<?xml version="1.0" encoding="utf-16"?>
<diagram>
<refresh value="30" />
<margin top="30" bottom="30" left="30" right="30" />
<rates>
<rate value="0" />
<rate value="100" />
<rate value="200" />
</rates>
<data>
<record rate="121" label="" />
<record rate="124" label="" />
<record rate="141" label="" />
<record rate="141" label="" />
<record rate="148" label="" />
<record rate="269" label="6:00" />
<record rate="701" label="" />
<record rate="755" label="" />
<record rate="795" label="" />
<record rate="850" label="7:00" />
<record rate="935" label="" />
<record rate="977" label="" />
</data>
</diagram>
Теперь все, что мне нужно, это значение скорости в последнем узле записи.Я не очень хорош в регулярных выражениях, но я играл в Rubular, и у меня появилось такое выражение:
<record\b(?:(?=(\s+(?:rate="([^"]*)")|[^\s>]+|\s+))\1)*>
Что казалось более или менее достаточным;он возвращает значение и лишнюю «/», от которой я не могу избавиться, но если я сам выполню это регулярное выражение в моем коде, я столкнусь с проблемой;Кажется, я не получаю одинаковых результатов.У меня был этот код:
regex = Regexp.new('<record\b(?:(?=(\s+(?:rate="([^"]*)")|[^\s>]+|\s+))\1)*>')
matchdata = regex.match(s)
puts matchdata[0]
Я даю весь источник XML для этой функции в аргументе "s".Но это только возвращает пустые строки.Может ли кто-нибудь помочь мне здесь?