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对象.以下是我为此尝试的一些方法:
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.