Tag: xpath

如何在Nokogiri中使用XPath?

我没有找到任何文档或教程。 这样的事情存在吗? doc.xpath(‘//table/tbody[@id=”threadbits_forum_251″]/tr’) 上面的代码将为我提供任何table ,其中有一个tbody子节点,其属性id等于“threadbits_forum_251”。 但为什么它从双//开始? 为什么最后有/tr ? 有关更多详细信息,请参阅“ Ruby Nokogiri解析HTML表II ”。 任何人都可以告诉我如何使用Nokogiri提取href , id , alt , src等? td[3]/div[1]/a/text()’ <— extracts text 我怎样才能提取其他东西?

如何让Nokogiri了解我的命名空间?

我有以下XML文档: @NOT_USED@ abcdefg 我想从中获取SessionIndex (即’abcdefg’)的内容。 我试过这个: XPATH_QUERY = “LogoutRequest[@ID][@Version=’2.0′][IssueInstant]/SessionIndex” SAML_XMLNS = ‘urn:oasis:names:tc:SAML:2.0:assertion’ SAMLP_XMLNS = ‘urn:oasis:names:tc:SAML:2.0:protocol’ require ‘nokogiri’ doc = Nokogiri::XML(xml) doc.xpath(XPATH_QUERY, ‘saml’ => SAML_XMLNS, ‘samlp’ => SAMLP_XMLNS) 但是我收到以下错误: Nokogiri::XML::SyntaxError: Namespace prefix samlp on LogoutRequest is not defined Nokogiri::XML::SyntaxError: Namespace prefix saml on NameID is not defined Nokogiri::XML::SyntaxError: Namespace prefix samlp on SessionIndex is not defined […]

为什么这个Nokogiri XPath的返回值为null?

我正在使用NOKOGIRI浏览网页。 我熟悉XPath,但我无法弄清楚为什么我的XPath无法获取特定行。 请参阅ruby代码。 我使用FireBug XML来validation我的XPath,所以我99%确定我的XPath是正确的。 require ‘nokogiri’ require ‘open-uri’ @searchURL = ‘http://www.umn.edu/lookup?UID=smit4562’ @xpath = ‘//html/body/p/table/tbody/tr/td[2]/table/tbody/tr[2]’ doc = Nokogiri::HTML(open(@searchURL)) puts ‘row should be = Email Address: smit4562@umn.edu’ puts ‘=> ‘ + doc.xpath(@xpath).to_s puts ‘is row emppty?’ puts ‘=> ‘ + doc.xpath(@xpath).empty?().to_s

使用Nokogiri在BR标签上拆分内容

我有一段代码我试图用nokogiri解析,看起来像这样: Link 1 (info1), Blah 1, Link 2 (info1), Blah 1, Link 3 (info2), Blah 1 Foo 2, 我可以使用以下内容访问td.j的源: data_items = doc.css(“td.j”) 我的目标是将每个行分成一个哈希数组。 我能看到的唯一逻辑分裂点是拆分BR,然后在字符串上使用一些正则表达式。 我想知道是否有更好的方法来做这个可能只使用nokogiri? 即使我可以使用nokogiri来吸取3行项目,它也会让我更容易,因为我可以在.content结果上进行一些正则表达式解析。 不知道如何使用Nokogiri抓住以br结尾的行 – 我应该使用xpath吗? 任何方向表示赞赏! 谢谢

如何创建一个nokogiri不区分大小写的Xpath选择器?

我正在使用nokogiri来选择’keywords’属性,如下所示: puts page.parser.xpath(“//meta[@name=’keywords’]”).to_html 我正在使用的其中一个页面的关键字标签带有大写字母“K”,这促使我使查询不区分大小写。 AND 所以,我的问题是:使nokogiri选择案例不敏感的最佳方法是什么? 编辑托马拉克的建议如下,对于这个具体问题非常有用。 我也想用这个例子来帮助更好地理解nokogiri,并且有一些我想知道并且没有成功搜索的问题。 例如,正则表达式’伪类’ Nokogiri Docs是否适合这样的问题? 我也很好奇nokogiri中的匹配?()方法。 我未能找到有关该方法的任何说明。 它与XPath 2.0中的“匹配”概念有什么关系(因此可以用来解决这个问题)吗? 非常感谢。

Nokogiri和XPath中未定义的名称空间前缀

我正在尝试解析Youtube Gdata以查看是否存在具有给定ID的video。 但是没有正常的标签,但有命名空间。 在链接http://gdata.youtube.com/feeds/api/videos?q=KgfdlZuVz7I上有标记: 1 有命名空间openSearch: xmlns:openSearch=’http://a9.com/-/spec/opensearchrss/1.0/’ 但我不知道如何在Nokogiri和Ruby中处理它。 这是代码的一部分: xmlfeed = Nokogiri::HTML(open(“http://gdata.youtube.com/feeds/api/videos?q=#{video_id}”)) xmlfeed.at_xpath(“openSearch:totalResults”) 它给出了错误: Undefined namespace prefix: openSearch:totalResults

类似正则表达式匹配的xpath表达式?

我想在某个模式的html doc中搜索div id。 我想在正则表达式中匹配此模式: foo_([[:digit:]]{1.8}) 使用xpath。 上述模式的xpath等价物是多少? 我坚持使用//div[@id=”foo_然后是什么?如果有人可以为它继续法律表达。 编辑 对不起,我想我必须详细说明。 实际上它不是foo_ ,它是post_message_ 顺便说一下,我使用mechanize / nokogiri(ruby) 这是片段: html_doc = Nokogiri::HTML(open(myfile)) message_div = html_doc.xpath(‘//div[substring(@id,13) = “post_message_” and substring-after(@id, “post_message_”) => 0 and substring-after(@id, “post_message_”) <= 99999999]') 仍然失败。 错误信息: 无法计算表达式’ //div[substring(@id,13) = “post_message_” and substring-after(@id, “post_message_”) => 0 and substring-after(@id, “post_message_”) <= 99999999] ‘(Nokogiri :: XML :: XPath […]

为什么Nokogiri xpath不像xmlns声明

我正在使用Nokogiri :: XML来解析Amazon SimpleDB的响应。 响应类似于: Foo42 BarXYZ 如果我直接将响应交给Nokogiri,则所有XPath查询(例如doc/”//Item/Attribute[Name=’Foo’]/Value” )都会返回一个空数组。 但是,如果我从SelectResponse标记中删除xmlns属性,它将完美地运行。 是否需要做一些额外的事情来解释名称空间声明? 这种解决方法感觉非常像黑客。

XPath轴,获取所有后续节点,直到

我有以下HTML示例: Foo bar lorem ipsum etc Bar baz dum dum dum poopfiddles 我想要提取’Foo bar’标题后面的所有段落,直到我到达’Bar baz’标题(’bar baz’标题的文字未知,所以不幸的是我无法使用bougyman提供的答案)。 现在我当然可以使用类似//h2[text()=’Foo bar’]/following::p但当然会抓住此标题后的所有段落。 因此,我可以选择遍历节点集并将段落推送到数组,直到文本与下一个标题的文本匹配为止,但说实话,这绝不像在XPath中那样酷。 有没有办法做到这一点,我错过了?