xml dom save导致xml文件出现问题

时间:2014-03-14 20:00:51

标签: xml dom vbscript

我已经编写了一个vbscript,它从模板中将一个新的Group和User注入到FileZilla Server.xml中 - 用一个参数替换组名和用户名...重新启动服务,然后它会出现在filezilla服务器中作为新帐户/指定文件夹...

只需简单的opentextfile,直到< / GROUPS>或者< / USERS&gt ;,注入代码,保存到新文件名。工作正常。

然后我编写了一些代码来删除这些Group和User元素(如果需要的话)...使用XML DOM。它工作正常,它完成了工作...但是,当我接着插入一个新记录(如上所述)时,它无法写入XML文件,因为它无法再找到< / GROUPS>或者< / USERS> ...我可以添加wscript.echo来显示正在处理的行,这些元素出现......但不会被操作,就像它看不到它们一样。

XML文件的保存方式有什么问题吗?它在记事本中显得很好。 Anythign与UTF或ASCII有关吗?我想知道是否删除类似于我如何添加它们的元素...读取直到某个点然后在将它们写入另一个文件时跳过这些行。

代码:检查元素(也尝试过Instr,在XMLDOM Save更新后无法找到它。

Do Until f1.AtEndOfStream
    strLine = f1.ReadLine
    If trim(strLine) = "</Groups>" Then
        If GroupExists="False" Then
            Set f2 = objFSO.OpenTextFile(templatepath&filetemplate,1)

。 。 。 。

Set objXMLDoc = CreateObject("Microsoft.XMLDOM") 
objXMLDoc.async = False 
objXMLDoc.load(filezillapath&filezilla)

Set objRoot = objXMLDoc.documentElement 
Set objLst  = objXMLDoc.selectSingleNode("//Groups/Group[@Name='" & strNewAccount & "']")
If objLst.Length > 0 Then
    objLst.parentNode.removeChild(objLst)
    objXMLDoc.Save(filezillapath&filezilla)
End If

Set objRoot = objXMLDoc.documentElement 
Set objLst  = objXMLDoc.selectSingleNode("//Users/User[@Name='" & strNewAccount & "']")
'If objLst.Length > 0 Then
    objLst.parentNode.removeChild(objLst)
    objXMLDoc.Save(filezillapath&filezilla)
'End If

Set objXMLDoc = Nothing

1 个答案:

答案 0 :(得分:1)

Set objLst  = objXMLDoc.selectSingleNode("//Groups/Group[@Name='" & strNewAccount & "']")
If objLst.Length > 0 Then
看起来很可疑。根据{{​​3}}(参见docs),selectSingleNode()返回一个节点或Nothing。所以试试

Set ndX = objXMLDoc.selectSingleNode(...)
If ndX Is Nothing Then
   message
Else
   action
End If

顺便说一句:

  • 不使用// if / root / where / ever
  • VBScript不是Lisp - 调用Sub时没有参数列表()