`
hipeace87
  • 浏览: 170454 次
  • 性别: Icon_minigender_1
  • 来自: 山东菏泽
社区版块
存档分类
最新评论

VBS操作XML文档,拷贝结点

阅读更多

Dim xmlDoc,xmlRoot,xmlNode,lastNode,newNode
Dim doc,docRoot,i,flag
Dim strNodeName,strPath,docPath
Dim xmlFolder,docFolder,oshell
Set oshell = CreateObject("Shell.Application")
Set xmlFolder = oshell.BrowseForFolder(0, "选择目标XML文档所在的目录", 0, ssfDRIVES)
  strPath = xmlFolder.Self.Path & "\jz-mapping.xml"
Set docFolder = oshell.BrowseForFolder(0,"请选择源XML文档所在的目录",0,ssfDRIVES)
  docPath = docFolder.Self.Path & "\jz-mapping.xml"
strNodeName = InputBox ("请输入要拷贝的结点ID值","输入ID值")

flag = True
Rem 加载目标文件
Set xmlDoc = CreateObject("Microsoft.XMLDOM")
xmlDoc.async = False
xmlDoc.load strPath
If xmlDoc.parseError.errorCode <> 0 Then
  Wscript.Echo "错误:" & Chr(13) & xmlDoc.parseError.reason
End If
Set xmlRoot = xmlDoc.documentElement

i = 0
Do While i<xmlRoot.childNodes.length
Set newNode = xmlRoot.childNodes.item(i)
  If newNode.getAttribute("id") = strNodeName Then
  flag = False
  Exit Do
    Else
  i = i + 1
  End If
loop

If flag Then 
    Rem 加载源文件,查找要拷贝的结点
    Set doc =CreateObject("Microsoft.XMLDOM")
    doc.async = False
    doc.load docPath
    If doc.parseError.errorCode <> 0 Then
    Wscript.Echo "错误:" & Chr(13) & doc.parseError.reason
    End If
    Set docRoot = doc.documentElement
    i = 0
    Do While i < docRoot.childNodes.length
    Set newNode = docRoot.childNodes.item(i)
    If newNode.getAttribute("id") = strNodeName Then
    Exit Do
    Else
    i = i + 1
    End If
    loop
   
    Set lastNode = xmlRoot.lastChild
    xmlDoc.documentElement.insertBefore newNode,lastNode
    xmlDoc.Save strPath
Else
MsgBox  "已存在要拷贝的结点!",,"Bug提示"
End If

上次发的那个要在CMD下运行,还要传参数
这个在运行时会弹出相应的对话框
方便了操作
1
0
分享到:
评论
1 楼 hipeace87 2008-12-11  
Windows XP 上,您可以使用“UserAccounts.CommonDialog”对象向用户显示一个标准的“文件打开”对话框。可以用类似以下代码的脚本:

Set objDialog = CreateObject("UserAccounts.CommonDialog")

objDialog.Filter = "All Files|*.*"
objDialog.InitialDir = "C:\"
intResult = objDialog.ShowOpen

If intResult = 0 Then
Wscript.Quit
Else Wscript.Echo objDialog.FileName
End If

这是一个小脚本,所以让我们逐行进行解释吧。我们首先创建一个对 UserAccounts.CommonDialog 对象的对象引用(名为“objDialog”)。接着,我们设置对话框的“筛选”属性。我们要显示所有文件,所以我们将筛选设置成这样:

objDialog.Filter = "All Files|*.*"

假如我们只想显示文本文件,那该怎么办?在这种情况下,我们将使用以下筛选:

objDialog.Filter = "Text Files|*.txt"

您也许能够看出它是如何运行的:我们为文件类型提供说明 (Text Files),然后插入一个竖线分隔符 (|),最后使用标准的通配符来指示所有 .txt 文件 (*.txt)。是不是想默认显示 .txt 文件,然后为用户提供查看所有文件的选项?那么可以使用以下代码:

objDialog.Filter = "Text Files|*.txt|All Files|*.*"

试一试,您就明白我们的意思了。

然后,我们指定默认文件夹。默认情况下,我们希望对话框显示位于驱动器 C 的根文件夹中的文件,所以我们这样设置“InitialDir”属性:

objDialog.InitialDir = "C:\"

希望显示 C:\Windows 文件夹中的文件吗?那么可以使用以下代码:

objDialog.InitialDir = "C:\Windows"

不必担心:这是一个真正的“文件打开”对话框,所以您可以随意单击,并且可以随时停下来。您从 C:\Windows 开始并不意味着您只能打开该文件夹中的文件。

最后,我们使用下面这行代码显示对话框:

intResult = objDialog.ShowOpen

现在,我们只需坐下来,等待用户选择文件并单击“确定”(或者等待用户单击“取消”)。如果用户单击“取消”,则变量 intResult 将被设置为 0。在我们的脚本中,我们检查 intResult 的值,如果是 0,我们将只需要使用 Wscript.Quit 来终止此脚本。

但是如果用户实际上选择了文件并单击了“确定”,那该怎么办?在这种情况下,intResult 将被设置为 -1,“FileDialog”属性将被设置为所选文件的路径名。我们的脚本只回显路径名,这意味着我们将得到类似以下内容的输出:

C:\WINDOWS\Prairie Wind.bmp

相关推荐

Global site tag (gtag.js) - Google Analytics