我以前Do
- Loop
代替For
- Next
,因爲我使用For
當有錯誤 - Next
循環:例如child
節點被刪除,連同parent
節點屬性(在本例中您不會看到),但parent
節點仍然保留。但是,使用Do
- Loop
我得到預期的結果(如果你想刪除所有parent
節點,除了第一位的,然後寫的Loop Until i = 0
代替Loop Until i = 1
在我的例子,我需要前兩個parent
節點):
Dim i As Integer = MyXmlDocument.GetElementsByTagName("parent").Count - 1
Do
MyXmlDocument.DocumentElement.RemoveChild(MyXmlDocument.GetElementsByTagName("parent")(i))
i -= 1
Loop Until i = 1
MyXmlDocument.Save(MyXmlFile)
的整個代碼如下(我在模塊中聲明'XmlReader','XmlSettings'和'XmlDocument',除了可以在模塊外使用它們的方法外LoadSettings()
被Form.Load
調用事件。發生:當加載XmlDocument
時發生錯誤異常,XmlReader
保持打開狀態。也許通過添加finally:MyXmlReader.Close()
,this 「問題」將得到解決。
Public Module Common
Public MyXmlFile As String = My.Application.Info.DirectoryPath & "\Common\myxmlfile.xml"
Public MyXmlReader As Xml.XmlReader
Public MyXmlReaderSettings As New Xml.XmlReaderSettings
Public MyXmlDocument As New Xml.XmlDocument
Public Sub LoadSettings()
MyXmlReaderSettings.DtdProcessing = DtdProcessing.Parse
If File.Exists(MyXmlFile) Then
Try
MyXmlReader = Xml.XmlReader.Create(MyXmlFile, MyXmlReaderSettings)
MyXmlDocument.Load(MyXmlReader)
MyXmlReader.Close()
If MyXmlDocument.GetElementsByTagName("parent").Count > 2 Then
Dim i As Integer = MyXmlDocument.GetElementsByTagName("parent").Count - 1
Do
MyXmlDocument.DocumentElement.RemoveChild(MyXmlDocument.GetElementsByTagName("parent")(i))
i -= 1
Loop Until i = 1
MyXmlDocument.Save(MyXmlFile)
End If
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End If
End Sub
End Module
雖然提出和回答你自己的問題是允許的,我們不鼓勵你保證的問題,本身是可以回答的問題** **。目前,我正在看這個,不知道「雙節點」是什麼意思。什麼使一個節點成爲雙重的?我假定你向我們展示的XML是輸入 - 相應的輸出應該是什麼,爲什麼?嘗試確保你的問題實際上描述了問題,*詢問*一個問題。 – 2015-02-06 07:48:24