如何使用nokogiri在rails中获取xml属性值的数组
问题描述:
我正在rspec rails中编写测试。如何使用nokogiri在rails中获取xml属性值的数组
我的观点有类似
<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]]"]')
抛出错误说 “无不能转换成字符串”。
我尝试以下,以获得属性值
find.xpath('//div[@id="dataDiv"]/@data-items')
但给出了同样的错误如上。但是当我在浏览器中看到时,我确实有@data-items
。
我使用轨道3.1和1.4.4引入nokogiri
谁能帮助我如何得到这个作为数组?
答
看起来您的HTML中存在引用问题,因此您的HTML无效。你不能把生双引号双引号中的属性里面:
data-items="[["A",100],["B",200],["C",50]]"
这data-items
不是有效的HTML属性,所以我并不感到惊讶,引入nokogiri无法理解这一点。
尝试修复你的看法产生有效的HTML:
data-items="[['A',100],['B',200],['C',50]]"
data-items='[["A",100],["B",200],["C",50]]'
,然后更新您的XPath相匹配的内引用您使用。
此外,您的XPath的这部分遭受类似的报价问题:
[@data-items="[["A",100],["B",200],["C",50]]"]
,所以你需要修复它:
have_xpath(%q{//div[@id="dataDiv"][@data-items='[["A",100],["B",200],["C",50]]']})
have_xpath('//div[@id="dataDiv"][@data-items=\'[["A",100],["B",200],["C",50]]\']')
或同样的想法的一些其他变种。
在html中允许自定义数据属性,并且可以在客户端使用javascript进行解析.data-check正常工作,正如我在我的问题中提到的。该数组来自我的ruby代码。所以我无法修改引号。 –
@Studdy:是的,HTML5允许自定义'data-'属性,但是'data-items'属性不是有效的HTML5,因为您试图将双引号放入双引号属性值'data-a =“”“ '不是HTML5属性,也不是'data-items';'data-check =“check”'可以正常工作,因为'“check”'是一个有效的属性值,但'“[[”A“,100], [“B”,200],[“C”,50]]“'不是,你的XPath表达式遇到类似的引用问题。修复你的XPath,修复你的HTML并修复你的Ruby。 –