ruby-on-rails – 使用Nokogiri和regex在Ruby XML文档中解析编码标签

我试图用嵌入在标签中的标签来解析
XML,比如使用Nokigiri和
Ruby的标签:

<seg>Trennmesser <ph>&lt;I.FIGREF ITEM=&quot;3&quot; FORMAT=&quot;PARENTHESIS&quot;&gt;</ph><bpt i="1">&lt;I.FIGTARGET TARGET=&quot;CIADDAJA&quot;&gt;</bpt><ept i="1">&lt;/I.FIGREF&gt;</ept></seg>

在这种情况下,我只需要“嵌入式标签”中的“Trennmesser”一词.

在第二个例子中:

<seg>Hilfsmittel <ph>&lt;F34@Z7@Lge&gt;</ph>X <ph>&lt;F0&gt;</ph>= 0,5mm zwischen    Beschleunigerwalze <ph>&lt;F34@Z7@Lge&gt;</ph>D<ph>&lt;F0&gt;</ph> und Trennmesser schieben.</seg>

封闭/ ph和开放ph标签内的单词也很有趣,因此正则表达式需要提取字符串“Hilfsmittel 0,5mm zwischen Beschleunigerwalze und Trennmesser schieben”.并丢弃其他一切.

我还在这里上传了部分文件:
http://pastebin.com/Q8CdnASz

最佳答案 在irb中尝试这个

require 'nokogiri'
x = Nokogiri::XML.parse('<seg>Hilfsmittel <ph>&lt;F34@Z7@Lge&gt;</ph>X <ph>&lt;F0&gt;</ph>= 0,5mm zwischen    Beschleunigerwalze <ph>&lt;F34@Z7@Lge&gt;</ph>D<ph>&lt;F0&gt;</ph> und Trennmesser schieben.</seg>')
x.xpath('//seg').children.reject {|x| x.element?}.join {|x| x.content}

对我来说这是输出

=> "Hilfsmittel X = 0,5mm zwischen    Beschleunigerwalze D und Trennmesser schieben."

这里的想法是我们迭代< seg>的孩子了.标签,拒绝那些元素本身(< ph>),这应该只留下内容元素.获取结果数组,并将内容元素作为一个字符串连接在一起.

请注意,输出与您描述的略有不同,因为两个标签之间还有一个额外的D和X.

点赞