2010-01-19 69 views
1

我有一個XML節點的引用,它是更大的XML樹的一部分。有沒有辦法獲得該元素的下一個/上一個兄弟沒有訪問父母並尋找它?像DOM的nextSibling就是我所期待的。E4X獲取元素的下一個兄弟

編輯:鑑於存在與E4X做到這一點不自然的方式,我就堅持以下(除了在我的情況,我會存儲實際的指標,而不是某個地方):

// next sibling: 
node.parent().children()[ node.childIndex() + 1 ] 
// previous sibling: 
node.parent().children()[ node.childIndex() - 1 ] 

回答

1

我沒有看到在ECMA-357,第2版的任何這樣的方法。此外,「兄弟姐妹」似乎沒有出現在我的標準副本中的任何地方。如果存在任何這樣的方法,則它們存在是因爲Adobe將它們添加爲規範的擴展。

+0

太糟糕了。我想我必須將節點的索引存儲在某個地方,以便高效地瀏覽它。感謝您在標準中查找它:) – poke 2010-01-19 14:27:28

+1

公平地說,DOM本身在算法上效率低下。注意W3C DOM中存在兩種不同的訪問子元素的方法,用於兄弟智能和索引智能訪問。支持或者給你快速的元素訪問(與下一個,上一個,父母,第一個孩子,最後一個孩子,說;與父母和一個孩子的數組索引明智的兄弟姐妹)與某些成語。支持這兩種方式意味着你不可避免地加快一個習慣用法,有時(模數技巧)會減慢另一個習慣用法。僅支持索引訪問的E4X避免了該問題(以需要基於索引的算法爲代價)。 – 2010-01-19 14:38:16

0
+0

不是真的,因爲我無法將XML對象轉換爲XMLNode。 (http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/XML.html) – poke 2010-01-19 14:25:07

+0

當然你可以:new XMLDocument(xml.toString()); – 2010-01-19 15:39:48

+0

足夠公平:P - 但我懷疑這是否足夠有效,以確保擁有E4X XML樹*和* DOM樹。 – poke 2010-01-19 17:34:12