从XML中删除内容与任意几个单词相匹配的元素

时间:2012-02-25 03:34:43

标签: ruby xml nokogiri

我有这个:

string1 = "<det>This</det> <vbz>is</vbz> <det>a</det> <nn>text</nn> <in>that</in> <vbz>has</vbz> <det>some</det> <vbn>desired</vbn> <nn>text</nn> <to>to</to> <vb>be</vb> <vbn>found</vbn>" 
substring = "desired text" 

我需要得到类似的东西:

ary = [
  "<det>This</det>", "<vbz>is</vbz>", "<det>a</det>", "<in>that</in>",
  "<vbz>has</vbz>", "<det>some</det>", "<to>to</to>", "<vb>be</vb>",
  "<vbn>found</vbn>"
]

我知道我可以使用一些正则表达式和数组/哈希和嵌套循环来实现 我想知道我是否可以使用Nokogiri以某种方式在这个过程中引入一些优雅?

2 个答案:

答案 0 :(得分:3)

你拥有的是一个XML文档片段,所以你可以像这样使用Nokogiri:

require "nokogiri"
doc = Nokogiri::XML::DocumentFragment.parse(string1)

要获取匹配子字符串中的单词的所有元素的列表,请执行以下操作:

words = substring.split
doc.xpath('*').reject {|e| words.include? e.text}.map(&:to_s)

#=> ["<det>This</det>", "<vbz>is</vbz>", "<det>a</det>", "<in>that</in>", "<vbz>has</vbz>", "<det>some</det>", "<to>to</to>", "<vb>be</vb>", "<vbn>found</vbn>"]

这匹配您想要的输出。

答案 1 :(得分:0)

您可以使用split命令,built into Ruby's String class。您可以像这样使用它:

string1 = "<det>This</det> <vbz>is</vbz> <det>a</det> <nn>text</nn> <in>that</in> <vbz>has</vbz> <det>some</det> <vbn>desired</vbn> <nn>text</nn> <to>to</to> <vb>be</vb> <vbn>found</vbn>"
ary = string1.split

然后,您可以使用Array类的map function遍历数组。我不确定你到底要做什么呢?获取数组中值的索引?如果是这种情况,您可以像这样使用Array类的index method

ary.index(substring)