使用XPath使用VBScript重命名XML文件

时间:2014-01-14 14:31:05

标签: xml xpath vbscript

我有一个VBScript,它根据这些XML上的节点值重命名目录中的XML文件。

需要使用“Operadora”名称和“Date”重命名这些文件。 “Operadora”是一个唯一的节点,但我的XML上有几个“Date”节点,所以我需要将最新的“Date”作为文件名的一部分。 StackOverflow中的一位朋友帮我找到了一种方法来处理一个存档,但是当它要读取多个文件时,我遇到了一个错误。

重命名第一个文件后,我在“nomeCerto = ...”行中出现“需要对象”错误。我几乎可以肯定这个“Set recentDate = Nothing”是错的,但我找不到改变它的东西。当“recentDate.Text”被取出时,代码可以正常工作。

遵循该计划:

Dim Caminho
Dim FSO
Dim FLD
Dim fil
Dim nomeErrado
Dim nomeCerto
Dim xmlDoc
Dim OrganisationInfo, Operadora, recentDate, contador, resultOperadora

Set xmlDoc = CreateObject("Msxml2.DOMDocument.6.0") 'Msxml2.DOMDocument / Microsoft.XMLDOM   
xmlDoc.Async = "False"
xmlDoc.setProperty "SelectionLanguage", "XPath"

Caminho = "C:\Users\f8057612\Desktop\Bancos\Script_Operadoras"

Set FSO = CreateObject("Scripting.FileSystemObject")        
Set FLD = FSO.GetFolder(Caminho)                            
contador = 1

For Each fil in FLD.Files
    If LCase(FSO.GetExtensionName(fil)) = "xml" Then
        xmlDoc.Load fil.Path
        nomeErrado = fil.Path

        If xmlDoc.ParseError = 0 Then

            For Each OrganisationInfo In xmlDoc.SelectNodes("//OrganisationInfo/OrganisationName")
                Operadora = OrganisationInfo.Text
            Next

            resultOperadora = Replace(Operadora, "/", "-")

            Set recentDate = Nothing

            For Each node In xmlDoc.SelectNodes("//NetworkData/RoutingInfoSection/ChangeHistory/ChangeHistoryItem/Date")
                If recentDate Is Nothing Then
                    Set recentDate = node
                ElseIf node.Text > recentDate.Text Then
                    Set recentDate = node
                End If
            Next

            nomeCerto = "IR21 - " & resultOperadora & " - " & contador & " - " & recentDate.Text & ".xml"                    ' " - " & recentDate.Text &
            'WScript.Echo "_" & nomeErrado & "_" & vbNewLine & "_" & nomeCerto & "_"

            FSO.MoveFile nomeErrado, nomeCerto
            contador = contador + 1
            resultOperadora = ""

        End If
    End If
Next

Set FLD = Nothing
Set FSO = Nothing

有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:0)

检查recentDate

的值
WScript.Echo TypeName(recentDate)

发生错误时最有可能Nothing

如果您在行中出现Object required错误

nomeCerto = "IR21 - " & resultOperadora & " - " & contador & " - " _
  & recentDate.Text & ".xml"

唯一可能的原因(AFAICS)是recentDate不是对象。原因可能是xmlDoc.SelectNodes("//NetworkData/RoutingInfoSection/ChangeHistory/ChangeHistoryItem/Date")在XML文档中找不到任何匹配的节点。仔细检查您当时正在处理的文件的内容。

您可以通过添加以下支票来缓解错误:

If recentDate Is Nothing Then
  nomeCerto = ...
  FSO.MoveFile nomeErrado, nomeCerto
End If