如何在rails中使用nokogiri获取xml属性值数组

发布于 2024-12-18 10:54:27 字数 697 浏览 1 评论 0原文

我正在 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

岛徒 2024-12-25 10:54:28

您的 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]]\']')

或者同一想法的其他变体。

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:

data-items="[["A",100],["B",200],["C",50]]"

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:

data-items="[['A',100],['B',200],['C',50]]"
data-items='[["A",100],["B",200],["C",50]]'

and then update your XPath to match the inner quoting you use.

Furthermore, this part of your XPath suffers similar quoting problems:

[@data-items="[["A",100],["B",200],["C",50]]"]

so you need to fix that too:

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]]\']')

or some other variant of the same idea.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文