2015-11-21 56 views
1

是否可以在VBA中組合兩組對象?我試圖元素的兩組通過的getElementsByTagName獲得的結合將兩組對象合併到VBA中

所以像下面

Set a = oXMLFile.getElementsByTagName(tag1) 
Set b = oXMLFile.getElementsByTagName(tag2) 

c = union(a,b) 

任何人都可以幫助嗎?

+3

你也可以遍歷兩組,並將它們添加到集合或數組 –

回答

0

您可以編寫一個XPath表達式,它是兩個標籤名稱的聯合,並將其提供給.selectNodes這將爲您提供IXMLDOMNodeList,其中包含具有任一標籤的所有元素節點。

如果你想所謂的「富」,並呼籲每個元素節點每一個元素節點「欄」,那麼這應該工作(|符號是XPath中union operator):

Set listOfBothTags = domDoc.selectNodes("//foo | //bar") 

注:

  • 節點將按它們在文檔中出現的順序返回,因此您將在整個集合中獲取混合兩個標記的節點。在XPath 2.0及更高版本中。這可以通過使用運算符來避免,但MSXML2僅支持XPath 1.0
  • 使用//這樣使用//效率不高,因此使用更具體的查詢(例如「/ fee/fi/foo |/fee/fi/bar 「)在更大的文檔上更可取
  • DOM文檔應該聲明爲」DOMDocument60「(早期綁定)或創建爲」DOMDocument.6.0「(後期綁定)MSXML2 DOMDocument的舊版本使用XSL模式作爲查詢語言比的XPath但是你可以重寫此描述here
+0

感謝噸barrowc! |符號就像一個魅力!我有一個更快的問題。是否可以選擇所有包含特定字符串的標籤的節點?例如我想選擇標籤中包含「foo」的所有節點。所以「foObar」和「xyzFOOxyz」都會被拾取。 – Timescape

+0

嘗試'Set nodeList = domDoc.SelectNodes(「// * [contains(name(),'foo')]」)',如[this question]中所述(http://stackoverflow.com/q/2691426/2127508 )和XPath 1.0規範[這裏](http://www.w3.org/TR/xpath/#function-name)和[here](http://www.w3.org/TR/xpath/#功能包含)。如果你需要不區分大小寫的匹配,那麼請參閱[這個答案](http://stackoverflow.com/a/1625859/2127508) – barrowc

+0

這是很棒的barrowc!謝謝你的幫助! – Timescape