2011-05-05 35 views
0

我有一個關於在Ruby中使用XPATH解析XML文檔的問題。使用XPATH和Ruby在XML文檔中循環

我的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' 
... 

你有一個想法?

+0

數據集的開始和結束的標準是什麼?圍繞一組的行是否有任何封閉元素? – ceving 2011-05-05 10:07:36

回答

0

引入nokogiri是這項工作相當標準的工具:

http://nokogiri.org/

下面是從文檔的例子:

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

對不起,我在工作,所以我不知道有時間給你一個特定於你的問題的片段,但我相信你可以從文檔和簡短的例子中找出它:-)

0

This Xpath //set//*[not(descendant::*)]/text()會爲您提供一組行中的文本元素列表。您必須用行的父節點名稱替換「set」。

+0

謝謝。它正在工作 – 2011-05-06 12:36:45