2016-09-21 174 views
3

我編寫了一個VBScript來刪除XML文件中的所有註釋。但它沒有正常工作。該腳本從.xml文件讀取,生成一個XML文件,該文件刪除註釋和另一個臨時XML文件。如何刪除XML註釋

Set argus = WScript.Arguments 
If argus.Count = 0 Then 
    WScript.Quit 
End If 
Set fs = CreateObject("Scripting.FileSystemObject") 
Set f_tu = fs.opentextfile(argus(0), 1, True) 
Set f_tun = fs.opentextfile(argus(1), 2, True) 
Set re_start = New RegExp 
' re_start.Pattern="<!--.*-->" 
re_start.Pattern="<!--" 
' <!--.*| 
re_start.IgnoreCase = False 
re_start.Global = False 
Setre_end = New RegExp 
re_end.Pattern = "-->" 
re_end.IgnoreCase = False 
re_end.Global = False 
Do While f_tu.AtEndOfStream <> True 
    data = f_tu.ReadLine 
    If re_start.Test(data) Then 
     Do While f_tu.AtEndOfStream <> True 
      data = f_tu.ReadLine 
      If re_end.Test(data) Then 
       Exit Do 
      End If 
     Loop 
     MsgBox data 
    Else 
     dataset = dataset+1 
     f_tun.WriteLine data 
    End If 
Loop 
f_tu.Close 
f_tun.Close 

回答

1

用於處理XML節點使用字符串方法。每次你做一隻小貓死亡。

使用適當的XML解析器,例如像這樣:

Set xml = CreateObject("Msxml2.DOMDocument.6.0") 
xml.Async = False 
xml.Load "C:\path\to\input.xml" 

If xml.ParseError <> 0 Then 
    WScript.Echo xml.ParseError.Reason 
    WScript.Quit 1 
End If 

Set comments = xml.SelectNodes("//comment()") 

上述會給你一個收集與你的XML文檔中的註釋節點。之後,這取決於你想要對評論做什麼。如果你想從XML使用這樣的刪除:

For Each comment In comments 
    comment.ParentNode.RemoveChild(comment) 
Next 

如果要取消對已被評論用這樣的節點:

Set fragment = CreateObject("Msxml2.DOMDocument.6.0") 
fragment.Async = False 
For Each comment In comments 
    fragment.LoadXml comment.Text 
    Set node = xml.ImportNode(fragment.DocumentElement, True) 
    comment.ParentNode.ReplaceChild(node, comment) 
Next 

然後保存XML迴文件:

xml.Save "C:\path\to\output.xml" 
2

你可以嘗試的東西像

With WScript.CreateObject("msxml2.DOMDocument.6.0") 
    .Async = False 
    .Load "in.xml" 
    .SelectNodes("//comment()").RemoveAll 
    .Save "out.xml" 
End With