2015-01-21 3 views
0

Я использую Apache JMeter в «регулярных выражений Extractor», и я пытаюсь извлечь некоторые параметры из файла XML, как это: -регулярные выражения с апача JMeter

http://search.spotxchange.com/vast/2.00/101458?VPAID=1&cb=1421845139 

Я извлечения параметров, как (высота, ширина, тип) видеофайл из этого этого тега: -

<MediaFile delivery="progressive" apiFramework="VPAID" bitrate="0" height="360" width="480" type="application/x-shockwave-flash"> 

Я использовал это регулярное выражение для того, чтобы извлечь этот Params: -

<MediaFile delivery="(.+?)" type="(.+?)" bitrate="(.+?)" height="(.+?)" width="(.+?)"> 

Основная проблема заключается в параметрах этих тегов. Они не отображаются в определенном порядке. Например, иногда (width = "") появляется в начале параметров медиафайла, и иногда это последний, как предыдущий пример.

Итак, как я могу написать эффективный экстрактор регулярных выражений для извлечения этих параметров?

+0

Используйте реальный XML-парсер вместо регулярных выражений, особенно если формат не является фиксированной, вы должны попробовать с Ored регулярных выражений, и это превратится в кошмар. Режимы IMHO одобрены для извлечения одного атрибута или для массового изменения одного параметра, но они не выполняются для разбора html или xml-структур. – Tensibai

ответ

1

JMeter предлагает XPath Extractor, предназначенный для получения значений из ответов XML/XHTML. То есть для получения width атрибута MediaFile тега вы можете использовать следующее выражение XPath:

//MediaFile/@width 

Для получения delivery атрибута:

//MediaFile/@delivery 

т.д.

Для получения дополнительной информации о языке XPath экстрактора и XPath см. следующие ссылки:

1

Предполагая, что вы не возражаете соответствие весь список атрибутов из между < и>, вы можете попробовать это:

<MediaFile(\s\w+=\"[^"]+\")+> 

<MediaFile # match '<MediaFile' exactly 
(   # start of capturing group 
\s   # exactly one space 
\w+=  # one or more letters followed immediately by an equals 
\"   # escaped(starting) quote mark 
[^"]+  # match anything EXCEPT double-quote once or more times 
\"   # escaped (end) quote 
)+   # close capturing group and expect that group once or more times 
>   # match > 

группировка «()» используется так, чтобы все выражение в банке добавьте к нему + в конце для нескольких атрибутов. Однако нет необходимости, чтобы это была группа захвата. Это действительно не захватывающая группа ('(?: Regex here)'), но это выглядит немного более запутанным, и в этом случае это не слишком важно.