使用Nokogiri转义标签名称中的句点

时间:2016-03-16 13:18:51

标签: ruby nokogiri

我有一个要解析的XML文件。以下是一些示例数据:

<result>
            <name>chemical name</name>
            <description></description>
            <ec---list-no.>1123-34-6</ec---list-no.>
            <cas-no.>321-98-7</cas-no.>
            <decision-type>Important</decision-type>
            <decision>http://link to decision</decision>
            <decision-date>12/06/2011</decision-date>
            <further-information></further-information>
            <remarks></remarks>
            <dossier-url>http://link</dossier-url>
</result>

例如,如果我想提取名称,则可以使用:

doc.xpath('//result').each do |record|
  name = record.at('name').text
  puts name
end

但是,我无法提取ec--list-nocas-no数据,因为标记名称包含句点"."

doc.xpath('//result').each do |record|
  cas = record.at('cas-no.').text
  puts cas
end

抛出错误。

unexpected '$' after '.'

我试图用反斜杠"\"来逃避它,但无济于事。还有单引号和双引号的各种组合。到目前为止,我对CSS转义字符的搜索毫无结果。

是否有优雅的方式逃避这段时间,或者我是否需要回到绘图板?

1 个答案:

答案 0 :(得分:0)

这适用于我的。这有帮助吗?

require 'nokogiri'
require 'pp'

s = "<result>
  <name>chemical name</name>
  <description></description>
  <ec---list-no.>1123-34-6</ec---list-no.>
  <cas-no.>321-98-7</cas-no.>
  <decision-type>Important</decision-type>
  <decision>http://link to decision</decision>
  <decision-date>12/06/2011</decision-date>
  <further-information></further-information>
  <remarks></remarks>
  <dossier-url>http://link</dossier-url>
</result>"

doc = Nokogiri::XML( s )
doc.xpath( "//result" ).each do | record |
  pp name = record.xpath( "cas-no." )
end