使用XPATH和Ruby在XML文档中循环

时间:2011-05-05 09:37:15

标签: ruby xml xpath

我有一个关于在Ruby中使用XPATH解析XML Document的问题。

我的XML的一小部分:

...
<Row>
  <Cell ss:StyleID="s248"><Data ss:Type="String">Picardie</Data></Cell>
  <Cell ss:Index="4" ss:StyleID="s28"/>
</Row>
<Row>
  <Cell ss:StyleID="s249"><Data ss:Type="String"><Font html:Color="#0000D4"
   xmlns="http://www.w3.org/TR/REC-html40">80 Somme</Font></Data></Cell>
  <Cell ss:Index="3" ss:StyleID="s30"/>
  <Cell ss:StyleID="s28"/>
</Row>
<Row>
  <Cell ss:StyleID="s250"><Data ss:Type="String"><Font html:Color="#DD0806"
   xmlns="http://www.w3.org/TR/REC-html40">André</Font></Data></Cell>
  <Cell ss:Index="3" ss:StyleID="s30"/>
  <Cell ss:StyleID="s28"/>
</Row>
<Row>
  <Cell ss:StyleID="s36"><Data ss:Type="String">23, rue des Lingers </Data></Cell>
  <Cell ss:StyleID="s36"><Data ss:Type="String">80100 ABBEVILLE</Data></Cell>
  <Cell ss:StyleID="s38"><Data ss:Type="String">'</Data></Cell>
</Row>
<Row ss:StyleID="s82">
  <Cell ss:StyleID="s49"><Data ss:Type="String">32, rue des Trois Cailloux</Data></Cell>
  <Cell ss:StyleID="s49"><Data ss:Type="String">80000 AMIENS</Data></Cell>
  <Cell ss:StyleID="s48"><Data ss:Type="String">03.22.22.01.66</Data></Cell>
  <Cell ss:StyleID="s85"/>
</Row>
...

所需的输出:

...
'Picardie' '80 Somme' 'André' '23, rue des Lingers' '80100 ABBEVILLE'
'Picardie' '80 Somme' 'André' '32, rue des Trois Cailloux' '80000 AMIENS' '03.22.22.01.66'
...

你有什么想法吗?

2 个答案:

答案 0 :(得分:0)

Nokogiri是这项工作的标准工具:

http://nokogiri.org/

以下是文档中的示例:

# Search for nodes by xpath
doc.xpath('//h3/a[@class="l"]').each do |link|
  puts link.content
end

抱歉,我正在工作,所以我没有时间给你一个特定问题的片段,但我相信你可以从文档和简短的例子中找到它: - )< / p>

答案 1 :(得分:0)

此Xpath //set//*[not(descendant::*)]/text()将为您提供一组行中的文本元素列表。您必须将“set”替换为行的父节点的名称。