如何在rails中使用nokogiri获取xml属性值数组
我正在 rspec Rails 中编写测试。
我的观点是,
<div id = "dataDiv" data-items= "[["A",100],["B",200],["C",50]]" data-check= "check">
我需要测试这个部门的数据,并为此使用了 xpath。
在我的规范中,
it should have_xpath('//div[@id="dataDiv"][@data-check="check"]')
工作正常,但
it should have_xpath('//div[@id="dataDiv"][@data-items="[["A",100],["B",200],["C",50]]"]')
抛出错误,提示“nil 无法转换为字符串”。
我尝试了以下方法来获取属性值
find.xpath('//div[@id="dataDiv"]/@data-items')
,但这给出了与上面相同的错误。但当我在浏览器中看到时,我确实有 @data-items
。
我正在使用 Rails 3.1 和 nokogiri 1.4.4
谁能帮助我如何将其作为数组获取?
I am writing tests in rspec rails.
My view has something like
<div id = "dataDiv" data-items= "[["A",100],["B",200],["C",50]]" data-check= "check">
I need to test the data of this division and used xpath for this.
In my specs,
it should have_xpath('//div[@id="dataDiv"][@data-check="check"]')
works fine but
it should have_xpath('//div[@id="dataDiv"][@data-items="[["A",100],["B",200],["C",50]]"]')
throws error saying "nil can't be converted to string".
I tried the following to get the attribute value
find.xpath('//div[@id="dataDiv"]/@data-items')
but that gives the same error as above. But I do have @data-items
when I see in browser.
I am using rails 3.1 and nokogiri 1.4.4
Could anyone help me how to get this as array ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您的 HTML 中似乎存在引用问题,因此您的 HTML 无效。您不能将原始双引号放在双引号属性中:
data-items
不是有效的 HTML 属性,因此 Nokogiri 无法理解它,我并不感到惊讶。尝试修复您的视图以生成有效的 HTML:,
然后更新您的 XPath 以匹配您使用的内部引用。
此外,XPath 的这一部分也遇到类似的引用问题:
因此您也需要解决这个问题:
或者同一想法的其他变体。
Looks like you have a quoting problem in your HTML so your HTML is invalid. You can't put raw double quotes inside a double-quoted attribute:
That
data-items
is not a valid HTML attribute so I'm not surprised that Nokogiri can't understand it.Try fixing your view to produce valid HTML:
and then update your XPath to match the inner quoting you use.
Furthermore, this part of your XPath suffers similar quoting problems:
so you need to fix that too:
or some other variant of the same idea.