2014-07-16 23 views
0

我在使用NSXMLElement上的nodesForXPath方法時遇到了一個奇怪的問題。
我正在使用該調用來查找與名稱匹配的元素的所有後代。例如:NSXMLElement nodesForXPath .// <name>返回比後代更多的匹配項

NSError *error = nil; 
NSArray *decendants = [self nodesForXPath:@".//xr" error:&error]; 

這通常似乎在我的代碼中工作。
但是,偶爾我會得到比元素後代更多的匹配。
在這種情況下,它似乎在查找與名稱匹配的所有項目從到文檔結尾的當前元素。

這似乎只發生在只有一層「後代」的情況下。
I.e.元素的所有子元素都沒有子元素。

這是一個龐大的文件,我正在處理(80MB)。
我正在去掉一些元素,但是我在搜索前正常化節點。

[self normalizeAdjacentTextNodesPreservingCDATA:NO]; 

任何人都可以提出這個問題的原因可能是什麼?需要調查的地區?

謝謝。

回答

1

不只是你。經過一番實驗後,它看起來像nodesForXPath,objectsForXQuery,並且當你指定一個後代選擇器時,朋友會被嚴重破壞。它們不是返回當前元素的匹配後代,而是返回以當前元素的後代開始的每個匹配元素,並繼續直到文檔結束。

僅當搜索到的元素顯示爲元素的直接子元素時,纔會出現這種情況。 (您的里程可能會有所不同 - 我沒有廣泛測試過。)

我已經報告了錯誤,因爲rdar:// 18317629,並且已經在OpenRadar中記錄了它。在該錯誤得到解決之前,您必須手動迭代DOM樹或仔細避免在包含匹配元素作爲其直接子元素的元素中搜索後代。

+0

或者檢查每個節點以查看它是否是後代,並在您點擊沒有的時候立即停止。 – dgatwood