Select 名称以特定字符串开头的所有 XML 个元素?
Select all XML elements whose name starts with a certain string?
我有两个元素,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>
我使用 Nokogiri 来解析来自 item
和 date
的数据。
我写了一半的脚本,它创建了元素:
doc.xpath("//content/*").each do |item|
Item.create!(
title: item.xpath("title").text,
description: item.xpath("description").text)
end
现在我需要查找并构建项目的所有日期(元素 date
),但无法理解如何解析 <data_1>
、<data_2>
、[=25 等标签=]等
我在尝试什么
tour.xpath("//*/data_*").each do |date|
puts date
end
或
tour.xpath{ |i| "//*/data_#{i}" }.each do |date|
puts date
end
但是它不起作用或者我得到一个错误。
试试这个:
doc.xpath("//content/*").each do |item|
...
item.xpath("./*[starts-with(local-name(), 'date_')]").each do |d|
...
end
end
(根据@kjhughes 的建议进行了剪辑)
用于选择文档中所有 date
元素的 XPath,无论它们的继承如何,都只是:
//date
选择名称以 "date_" 开头的所有元素的 XPath 是:
//*[starts-with(local-name(), 'date_')]
见starts-with()
and local-name()
。
我有两个元素,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>
我使用 Nokogiri 来解析来自 item
和 date
的数据。
我写了一半的脚本,它创建了元素:
doc.xpath("//content/*").each do |item|
Item.create!(
title: item.xpath("title").text,
description: item.xpath("description").text)
end
现在我需要查找并构建项目的所有日期(元素 date
),但无法理解如何解析 <data_1>
、<data_2>
、[=25 等标签=]等
我在尝试什么
tour.xpath("//*/data_*").each do |date|
puts date
end
或
tour.xpath{ |i| "//*/data_#{i}" }.each do |date|
puts date
end
但是它不起作用或者我得到一个错误。
试试这个:
doc.xpath("//content/*").each do |item|
...
item.xpath("./*[starts-with(local-name(), 'date_')]").each do |d|
...
end
end
(根据@kjhughes 的建议进行了剪辑)
用于选择文档中所有 date
元素的 XPath,无论它们的继承如何,都只是:
//date
选择名称以 "date_" 开头的所有元素的 XPath 是:
//*[starts-with(local-name(), 'date_')]
见starts-with()
and local-name()
。