如何使用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]]\']') 

或同样的想法的一些其他变种。

+0

在html中允许自定义数据属性,并且可以在客户端使用javascript进行解析.data-check正常工作,正如我在我的问题中提到的。该数组来自我的ruby代码。所以我无法修改引号。 –

+0

@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。 –