选择名称以某个字符串开头的所有XML元素?

odi*_*nsy 2 ruby xml xpath ruby-on-rails nokogiri

我有两个要素,item并且date:

  • item has_many日期
  • date belongs_to项目

我有一个XML树的文件,如下所示:

<content>
  <item_1>
    <title>
    <description>
    <date_1>
      <date></date>
      <count></count>
    </date_1>
    <date_2>
      <date></date>
      <count></count>
    </date_2>
  </item_1>
  <item_2>
    <title>
    <description>
    <date_1>
      <date></date>
      <count></count>
    </date_1>
    <date_2>
      <date></date>
      <count></count>
    </date_2>
  </item_2>
</content>
Run Code Online (Sandbox Code Playgroud)

我使用Nokogiri来解析来自item和的数据date.我写了一半脚本,它创建了元素:

doc.xpath("//content/*").each do |item|
  Item.create!(
              title: item.xpath("title").text,
              description: item.xpath("description").text)
end
Run Code Online (Sandbox Code Playgroud)

现在我需要找到并建立项目(元素的所有日期date),但不知道如何解析标签,如<data_1>,<data_2>,<data_3>等我试着

  tour.xpath("//*/data_*").each do |date|
    puts date
  end
Run Code Online (Sandbox Code Playgroud)

要么

  tour.xpath{ |i| "//*/data_#{i}" }.each do |date|
    puts date
  end
Run Code Online (Sandbox Code Playgroud)

但它不起作用或我收到错误.

kjh*_*hes 6

用于选择date文档中所有元素的XPath ,无论其遗产如何,都是:

//date
Run Code Online (Sandbox Code Playgroud)

用于选择名称以"date_"开头的所有元素的XPath是:

//*[starts-with(local-name(), 'date_')]
Run Code Online (Sandbox Code Playgroud)

starts-with()local-name().