REXML - 在XML响应中存在断言值的问题

时间:2011-09-08 18:30:45

标签: ruby rexml

今天早上我在这里使用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 :(得分:0)

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的事情; - )

相关问题