代码之家  ›  专栏  ›  技术社区  ›  lumos

循环遍历XML文件的元素,看看它们是否包含数组中的任何值?

  •  0
  • lumos  · 技术社区  · 8 年前

    我有一个XML文档,它有数百个文本条目,每个条目还列出了一个URL。每个URL是一个字符串(在标记内),以唯一的4位数字结尾。XML文件的格式基本如下:

    <entry>
    [other content]
    <id>http://www.URL.com/blahblahblah-1234</id>
    [other content]
    </entry>
    

    numbers = ["1234", "8649", etc.] include? ,效果很好。然而,当“数字”数组中有数百个字符串时,我不确定如何自动执行此操作。这基本上是我在逻辑上需要做到的:

    id = nokodoc.css("id")
    
    id.each { |id|
        hyperlink = id.text
        if hyperlink.include?(numbers)
            puts "yes!"
        else
            puts "no :("
        end
        }
    

    包括 需要一个字符串,而我传递的是整个数组。(例如,如果我这样做 include?(numbers[0]) ,它有效。)我已经试过了 any? 但在这种情况下似乎不起作用。

    有没有我不知道的Ruby方法,可以告诉我

    编辑: 以数组中的一个数字结束,即。

     if hyperlink.include? (any number from the array)
        puts "this one is good"
     else
        id.parent.remove
    

    提前非常感谢您的所有见解!

    1 回复  |  直到 8 年前
        1
  •  0
  •   Danil Speransky    8 年前

    您可以这样做:

    numbers = ['1234', '8649', ..]
    urls = nokodoc.css('id').map(&:text)
    urls = urls.select { |url| numbers.any? { |n| url.include? n } }
    

    numbers = ['1234', '8649', ..]
    urls = nokodoc.css('id').map(&:text)
    urls = urls.select { |url| numbers.include? url[-4..-1] }
    

    更新

    关于问题的变化:

    numbers = ['1234', '8649', ..]
    
    nodes = nokodoc.css('id')
    
    nodes.each do |node|
      url = node.text
    
      if numbers.any? { |n| url.include? n }
        puts 'this one is good'
      else
        node.parent.remove
      end
    end