我有一個需要修改的xml文件「sample.xml」。我在我的Excel表中列A中有大約300個字符串的列表,我需要打開XML文件並搜索這些字符串(它將是子節點的內容),如果發現我想刪除它的父節點。使用vba搜索xml文件中節點的內容和刪除父節點
這裏是我的sample.xml中,它比我下面提到巨大的文件,我已經在A柱公佈了它的一部分
<gera_it>
<input>
<Servers>
<Server>
<Name>htp</Name>
<link>1.2.56.89</link>
</Server>
<Server>
<Name>wty</Name>
<link>1.4.67.89</link>
</Server>
<Server>
<Name>vnb</Name>
<link>1.6.11.98</link>
</Server>
<Server>
<Name>mnf</Name>
<link>1.4.89.45</link>
</Server>
<Server>
<Name>typ</Name>
<link>1.2.44.60</link>
</Server>
</Servers>
<config>
<map>yes</map>
</config>
</input>
</gera_it>
我的excel表中有數據來自各地的300行數據。這些字符串是<Name> </Name>
的內容。我提到他們的一些下面
wty
mnf
uyt
ifh
我想在sample.xml的文件中搜索這些字符串,如果該字符串被發現,我想刪除<Server> </Server>
即)它的整個父節點。
這裏是我到現在爲止
Const Frow As Long = 3
Const Lrow As Long = 206
Const Stringcol As String = "A"
Dim varStrings As Variant
Dim Fpath As String
Dim ws As Worksheet
Dim lngIndex As Long
Fpath = ThisWorkbook.Path & "\sample.xml"
Set XDoc = CreateObject("MSXML2.DOMDocument")
XDoc.async = False: XDoc.validateOnParse = False
XDoc.Load (Fpath)
Set ws = ActiveSheet
With ws
' Create the strings array from the given range value.
varStrings = .Range(.Cells(Frow, Stringcol), .Cells(Lrow, Stringcol)).Value
' Transpose the strings array into a one dimentional array.
varStrings = Application.WorksheetFunction.Transpose(varStrings)
End With
Set objFileSystemObject = CreateObject("Scripting.FileSystemObject")
For lngIndex = LBound(varStrings) To UBound(varStrings)
If Len(Trim$(varStrings(lngIndex))) > 0 Then
String = varStrings(lngIndex)
XPath = "//gera_it/input/Servers/Server[Name = '" & String & "']"
'delete child nodes that matches array strings
For Each Node In XDoc.SelectNodes(XPath)
Node.ParentNode.Removechild (Node)
Next
Else
'Do Nothing
End If
Next
XDoc.Save ThisWorkbook.Path & "\sample.xml"
我得到一個空sample.xml中,如果我在上面執行,我不知道哪裏出了問題。
有人可以幫助我。
如果你從未去過www.w3schools.com,我會向你推薦這個網站。他們有關於XML和XPath的優秀基礎教程。在你的xpath的開頭使用double //,你可以將它縮短到// Server [Name ='「&strName&''],它仍然可以工作。縮短版本將返回任何匹配的服務器節點,即使它存在於多個父節點下。 – j2associates