2016-08-26 46 views
-1

根據是否有一個或多個多節點,我的程序行爲會有所不同。使用不同數量的節點對xml文件進行迭代

body["Folder"].count 

單節點例如

<Document> 
    <Folder> 
    <name></name> 
    <placemark></placemark> 
    </Folder> 
</Document> 

預期輸出:1,實際:2 它出現在節點上執行文件夾內的計數。

多個節點例如

<Document> 
    <Folder> 
    <name></name> 
    <placemark></placemark> 
    </Folder> 
    <Folder> 
    <name></name> 
    <placemark></placemark> 
    </Folder> 
</Document> 

預期輸出:2,實際:2 它計算文件夾的節點,而不是文件夾的孩子。 3文件夾給3等

我可以做什麼來計算單個節點的例子中的文件夾節點,而不是它的子節點?

+1

你能提供一個正在運行的例子,或者至少有一些關於'''body''實際是什麼的信息嗎? 您使用的是什麼XML庫? –

+0

正文是文檔的散列。爲了解析文件,我目前使用的是破解寶石,但我遇到了同樣的問題,使用Ruby的標準庫將xml轉換爲散列或json。 – sso777

+0

那麼哈希是什麼樣子? –

回答

0

crack gem會將相同的標籤放在與數組相同的鍵下。如果你試試這個:

require 'crack' 

body = Crack::XML.parse("<Document> <Folder><name></name><placemark></placemark></Folder><Folder><name></name><placemark></placemark></Folder></Document>") 

body將是:

=> "{\"Document\"=>{\"Folder\"=>[{\"name\"=>nil, \"placemark\"=>nil}, {\"name\"=>nil, \"placemark\"=>nil}]}}" 

意思就是說body["Folder"]是有兩個元素(這兩個「文件夾」標籤),並計陣列將count將返回2

「數」總是數的結果的原因相同。