2012-03-15 25 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