I have optimized the code a bit more, kindly check it out:
Public Function XmlToDataTable(ByVal path As String) As DataTable
Dim dt As New DataTable
Dim doc As New XmlDocument()
Dim PoNum As String = String.Empty
Dim Header As String = String.Empty
doc.Load(path)
dt.Columns.Add("PoNum")
dt.Columns.Add("Header")
dt.Columns.Add("Line")
dt.Columns.Add("Error")
Dim cnt As Integer = doc.SelectNodes("Orders/OrderHeader").Count
For k As Integer = 0 To cnt - 1
Dim node As XmlNode = doc.SelectNodes("Orders/OrderHeader").Item(k)
PoNum = node.Item("CustomerPoNumber").InnerText
Header = node.Item("ErrorMessages").InnerText
Dim n As Integer = doc.SelectNodes("Orders/OrderDetails").Count
For m As Integer = 0 To n - 1
Dim element As XmlNode = doc.SelectNodes("Orders/OrderDetails").Item(m)
Dim obj(3) As Object
obj(0) = PoNum : obj(1) = Header
For Each stocks As XmlNode In element.ChildNodes
Dim line As String = stocks.Item("Line").InnerText
Dim description As String = stocks.Item("ErrorMessages").InnerXml.Replace("", " & ").Replace("", "").Replace("", "")
obj(2) = line : obj(3) = description
dt.Rows.Add(obj)
Next
Next
Next
Return dt
End Function