在VBScript中导航XML节点,用于Dummy

时间:2012-03-15 16:24:49

标签: xml dom xpath vbscript

我正在尝试编写一个脚本,它将在xml文件中为我操作一些数据。我对VBScript很新,但有VB.NET和VBA背景,所以我觉得我知道自己在做什么。

我认为可能有更好的方法来浏览文件,而不是为每一行调用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文件或类似的东西)。

1 个答案:

答案 0 :(得分: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。