REXML - Возникли проблемы при подтверждении значения, присутствующего в ответе XML - PullRequest
1 голос
/ 08 сентября 2011

Я получил помощь здесь сегодня утром, используя REXML, и ответ помог мне понять больше об этом. Однако я столкнулся с другой проблемой и, похоже, не могу ее решить.

Мой ответ такой:

<?xml version="1.0"?>
<file>
<link a:size="2056833" a:mimeType="video/x-flv" a:bitrate="1150000.0" a:height="240" a:width="320" rel="content.alternate"> https://link.com</link>
</file>

Итак, я хочу сказать, что a: mimeType - это video / x-flv

Вот что я пробовал:

xmlDoc = REXML::Document.new(xml)
assert_equal xmlDoc.elements().to_a("file/link['@a:mimeType']").first.text, 'video/x-flv'

а также:

assert xmlDoc.elements().to_a("file/link['@a:mimeType']").include? 'video/x-flv'

и различные комбинации. Я на самом деле получаю много этих ссылок назад, но мне действительно важно, если у одного из них есть этот mimeType. Кроме того, некоторые ссылки не имеют mimeType.

Любая помощь с благодарностью.

Спасибо, Адриан

1 Ответ

0 голосов
/ 08 сентября 2011

text извлекает текстовое содержимое элементов (текст между тегами).Вы хотите получить доступ к «атрибуту».Попробуйте

xmlDoc.elements().to_a("file/link").first.attributes['a:mimeType']

Чтобы узнать, имеет ли какая-либо из ссылок правильный mimeType, вы можете преобразовать массив элементов в массив атрибутов mimeType и проверить, содержит ли он правильное значение:

xmlDoc.elements().to_a("file/link").map { | elem | elem.attributes['a:mimeType'] }.include? 'video/x-flv'

ОБНОВЛЕНИЕ

Или намного проще, проверьте, есть ли элемент с атрибутом mimeTypes, имеющий правильное значение:

xmlDoc.elements().to_a("file/link[@a:mimeType='video/x-flv']") != []

Спасибо, что научили меня кое-что оXPath; -)

...