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

use*_*662 8 xml vbscript xpath dom

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

我认为可能有一种更好的方法来导航文件,而不是为每一行调用InStr()或类似的东西来查看我在寻找的是否存在.我最初的想法是使用我从System.XML在VB.NET中看到的一些方法,因为我已经看到了节点导航功能和成员.

在调查之后,我找不到任何方法将命名空间(System.XML或其他)导入VBScript而不在网页上运行.我决定寻找其他选择,而不是花更多的时间来寻找这个.

事实证明,还有其他方法可以实现我想要的,使用专门处理XML文件导航节点的方法和对象.我了解到这些"系统"的一些常见例子(由于缺乏一个更好的术语,因为我确信这是不合适的)似乎是DOM和XPath.

我从调查XPath开始(因为我在一些地方看到XPath被认为优于DOM,例如:使用VBScript遍历XML文件中的所有节点).我在vbscript中找不到任何描述XPath基础知识的东西.路径的语法有很多,但我找不到任何描述如何在VBScript中实际调用该语法以使用它的基础知识.所以我转到了下一个选项.

然后我发现了许多关于DOM的文章/问题/等等.所以我试一试.他们中没有一个人工作,都给了我错误.大多数情况下,似乎永远不会正确加载DOM对象.以下是我为此尝试的一些方法:

来自MSDN: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
Run Code Online (Sandbox Code Playgroud)

每次都返回失败.

基于另一种方法:

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

然后我尝试了一些检测它是否像xmlDom.documentElement中每个节点名称的消息框一样工作.

我已经尝试了很多其他的东西,我甚至不记得其中的大多数.

我根本不知道我还能尝试什么,或者为什么这对我不起作用.我只是不知所措,我仍然可以尝试不同的方式,同时仍然具有COULD工作的语法.

所以我的问题是:如何在不将网页嵌入网页的情况下使用VBScript导航XML文件?我需要了解极端的基础知识.

我知道我的问题可能看起来很愚蠢和无知,因为这应该是容易获得的信息,但我真的不能为我的生活找到基本知识我需要了解如何使用JUST VBScript以任何方式导航节点(不是在html或asp中)文件或类似的东西).

小智 16

这是一个小例子:

假设您有一个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>
Run Code Online (Sandbox Code Playgroud)

然后你可以使用这个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
Run Code Online (Sandbox Code Playgroud)

我希望这有助于您开始使用VBScript和XML.

  • 您可以在此处找到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上的教程. (3认同)