2012-03-15 70 views
6

我想寫一個腳本,將在xml文件中操縱我的一些數據。我對VBScript相當陌生,但有一個VB.NET和VBA背景,所以我覺得我知道我在做什麼。導航VBScript中的XML節點,爲一個虛擬

我認爲有可能是一種更好的方式來瀏覽文件,而不是大量調用InStr()或類似的每一行,看看我在找什麼。我最初的想法是使用我在System.XML的VB.NET中看到的一些方法,因爲我已經看到了節點導航函數和成員。

經過調查,我找不到任何方式將名稱空間(System.XML或其他)導入到VBScript中,而不在網頁上運行。我決定尋找其他的選擇,而不是花更多的時間尋找這個。

原來有其他方法可以做我想做的事情,使用專門處理XML文件導航節點的方法和對象。我瞭解到,這些「系統」的一些常見示例(缺乏更好的術語,因爲我相信這是不恰當的)似乎是DOM和XPath。

我從調查XPath開始(因爲我在幾個地方看到XPath認爲優於DOM,例如:Traversing all nodes in an XML file with VBScript)。我無法找到任何描述vbscript中XPath基礎的內容。路徑和語法的語法有很多,但是我找不到任何描述如何在VBScript中實際調用該語法以利用它的基礎知識。於是我轉向下一個選項。

然後我發現了許多關於DOM的稍微不同的文章/問題/等。所以我試了一下。沒有一個人工作,都給了我錯誤。大多數情況下,它似乎是一個DOM對象永遠不會正確加載。這裏僅僅是我已經嘗試了這種方法的幾個:

MSDN: a beginner's guide to XML DOM

Set objParser = CreateObject("Microsoft.XMLDOM") 
Dim xDoc As MSXML.DOMDocument 
Set xDoc = New MSXML.DOMDocument 

If xDoc.Load("C:\My Documents\cds.xml") Then 
    msgbox("Success!") 
Else 
    msgbox("Failure!") 
End If 

每次都返回失敗。

Based on another method

dim xmlDom 
set xmlDom = createobject("MSXML2.DOMDocument") 
xmlDom.async = false 
xmlDom.load ("C:\MyFileLocation\MyFile.xml") 

,然後我嘗試了一些事情來檢測,如果它的工作就像在xmlDom.documentElement的每個節點名消息框。

我已經嘗試了很多其他的東西,我甚至不記得它們中的大多數。

我根本不知道我可以嘗試什麼,或者爲什麼這不適合我。對於我可以嘗試不同方式的更多東西,我仍然感到茫然,同時仍然有可以工作的語法。

所以我的問題是:如何在VBScript中導航XML文件而不將腳本嵌入到網頁中或以其他方式?我需要知道極端的基礎知識。

我知道我的問題可能似乎愚蠢和無知,因爲這應該是容易獲得的信息,但我真的不能爲我的生活找到基本知識我需要了解如何使用JUST VBScript(不在一個html或asp文件或類似的東西)。

+0

第一種方法永遠不會在VBScript中工作,因爲它是爲VBA編寫的。這是不同的口味。在VBScript中,您不能將類型指派給像Dim XDoc As MSXML.Document這樣的變量。您必須將其設爲Dim,然後使用新創建的文檔(如第二種方法)進行設置。第二種方法的錯誤是路徑名,必須是一個字符串:'xmlDom.load「C:\ MyFileLocation \ MyFile.xml」'。你的問題並不無知,VBScript和XML數據有點困難;這些方法不是很清楚,也沒有很好的記錄。 fmunkert的例子會給你一個好的開始。 – AutomatedChaos 2012-03-16 09:49:06

+0

實際上,第二種方法中的錯誤是我將代碼傳輸到這裏的錯誤,我相信。我很確定我以前是以字符串形式試過的。謝謝你指出,雖然!另外,感謝關​​於vba vs vbscript的一點:在msdn頁面中,第一行用vbscript給出了一個例子,然後休息在vba中。謝謝msdn:/ – user1167662 2012-03-16 13:31:55

回答

15

這裏是一個小例子:

假設你有一個與此內容稱爲C:\Temp\Test.xml文件:

<?xml version="1.0"?> 
<root> 
    <property name="alpha" value="1"/> 
    <property name="beta" value="2"/> 
    <property name="gamma" value="3"/> 
</root> 

然後你就可以使用這個VBScript中:

Set objDoc = CreateObject("MSXML.DOMDocument") 
objDoc.Load "C:\Temp\Test.xml" 

' Iterate over all elements contained in the <root> element: 

Set objRoot = objDoc.documentElement 
s = "" 
t = "" 
For Each child in objRoot.childNodes 
    s = s & child.getAttribute("name") & " " 
    t = t & child.getAttribute("value") & " " 
Next 
MsgBox s ' Displays "alpha beta gamma " 
MsgBox t ' Displays "1 2 3 " 

' Find a particular element using XPath: 

Set objNode = objDoc.selectSingleNode("/root/property[@name='beta']") 
MsgBox objNode.getAttribute("value")  ' Displays 2 

我希望這有助於讓你開始使用VBScript和XML。

+0

謝謝SOOO很多!!!!!這非常有幫助!雖然這不是一切,但足以讓球滾動,這樣我就可以找出其他答案:)再次感謝! – user1167662 2012-03-16 19:32:00

+0

什麼是與DOMDocument相關的其他一些有用的方法或成員?有沒有與他們有據可查的任何地方?我在這個時候特別想知道一個「selectnodeswhich ...」類型的方法或任何選擇多個節點而不是一個節點的方法。 – user1167662 2012-03-16 19:42:28

+3

您可以在這裏找到IDOMDocument的方法和屬性列表:http://msdn.microsoft.com/en-us/library/windows/desktop/ms757878(v=vs.85).aspx。爲了選擇多個節點,請使用'selectNodes'和XPath。如果您對XPath不熟悉,請閱讀http://www.w3schools.com/xpath/xpath_intro.asp上的教程。 – 2012-03-17 06:50:19