【问题标题】:How do I select IDs using xpath in Nokogiri?如何在 Nokogiri 中使用 xpath 选择 ID?
【发布时间】:2011-05-12 06:39:05
【问题描述】:

使用此代码:

doc = Nokogiri::HTML(open("text.html"))
doc.xpath("//span[@id='startsWith_']").remove

我想选择以'startsWith_' 开头的每个span#id 并将其删除。我尝试搜索,但失败了。

【问题讨论】:

    标签: ruby xpath nokogiri


    【解决方案1】:

    这是一个例子:

    require 'nokogiri'
    
    html = '
    <html>
    <body>
      <span id="doesnt_start_with">foo</span>
      <span id="startsWith_bar">bar</span>
    </body>
    </html>'
    
    doc = Nokogiri::HTML(html)
    p doc.search('//span[starts-with(@id, "startsWith_")]').to_xml
    

    这就是选择它们的方法。

    doc.search('//span[starts-with(@id, "startsWith_")]').each do |n|
      n.remove
    end
    

    这就是删除它们的方法。

    p doc.to_xml
    # >> "<span id=\"startsWith_bar\">bar</span>"
    # >> "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"http://www.w3.org/TR/REC-html40/loose.dtd\">\n<html><body>\n  <span id=\"doesnt_start_with\">foo</span>\n  \n</body></html>\n"
    

    XPath, XQuery, and XSLT Functions”页面有一个可用函数列表。

    【讨论】:

    • 你知道为什么有些函数不能工作吗(例如-ends-with())?
    • 我不知道。 Nokogiri 使用 libxml2,这是一个标准的 XML 解析器。您应该在 Nokogiri-talk 邮件列表中询问。
    【解决方案2】:

    试试这个 xpath 表达式:

    //span[starts-with(@id, 'startsWith_')]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-06
      • 2014-08-19
      • 2012-02-23
      • 2013-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多