Private Function GetPreviousMonthsXml(ByVal months As Integer, ByVal startDate As Date, ByVal xDoc As XmlDocument, ByVal path As String, ByVal nodeName As String) As XmlDocument
' build xpath string with list of months to return
Dim xp As New StringBuilder("//")
xp.Append(nodeName)
xp.Append("[")
For i As Integer = 0 To (months - 1)
' get year and month portion of date for datestring
xp.Append("starts-with(@Id, '")
xp.Append(startDate.AddMonths(-i).ToString("yyyy-MM"))
If i < (months - 1) Then
xp.Append("') or ")
Else
xp.Append("')]")
End If
Next
' *** This is the block that needs to be refactored ***
' import nodelist into an xmldocument
Dim xnl As XmlNodeList = xDoc.SelectNodes(xp.ToString())
Dim returnXDoc As New XmlDocument(xDoc.NameTable)
returnXDoc = xDoc.Clone()
Dim nodeParents As XmlNodeList = returnXDoc.SelectNodes(path)
For Each nodeParent As XmlNode In nodeParents
For Each nodeToDelete As XmlNode In nodeParent.SelectNodes(nodeName)
nodeParent.RemoveChild(nodeToDelete)
Next
Next
For Each node As XmlNode In xnl
Dim newNode As XmlNode = returnXDoc.ImportNode(node, True)
returnXDoc.DocumentElement.SelectSingleNode("//" & node.ParentNode.Name & "[@Id='" & newNode.Attributes("Id").Value.Split("-")(0) & "']").AppendChild(newNode)
Next
' *** end ***
Return returnXDoc
End Function
Refactorings
No refactoring yet !
Basically I'm just try to load an XmlNodeList into an XmlDocument and I was wondering if there's a more efficient method than looping.