Поскольку существует много подходов, этот является одним из них. Но прежде чем вы начнете смотреть на код, вам нужно уделить много внимания вашей строке xml. Вы не правы в формировании тегов, замыканиях, именах и т. Д. c. Xml должен быть хорошо отформатирован с одинаковой апертурой и закрытием имени тега. В именах тегов нет пробелов. Используйте подход с учетом регистра. (Вы можете увидеть разницу от вашего кода и строки xml ниже). Этот код следует рассматривать как основу, помогающую вам понять механизм. Очевидно, что должно быть выполнено в соответствии с вашими потребностями.
Private Sub ReadXML()
Dim mxmlString As String = "<Schedule-Tables>
<LN-Schedule-Table>
<Short-Name>world</Short-Name>
<Position>Start</Position>
<Table-Entrys>
<Application-Entry>
<Delay>0.01</Delay>
<Frame>gh/ho/frTrig_o
</Frame>
</Application-Entry>
<Application-Entry>
<Delay>0.01</Delay>
<Frame>gh/ho/frTrig_o
</Frame>
</Application-Entry>
</Table-Entrys>
</LN-Schedule-Table>
<LN-Schedule-Table>
<Short-Name>world</Short-Name>
<Position>Start</Position>
<Table-Entrys>
<Application-Entry>
<Delay>0.01</Delay>
<Frame>gh/ho/frTrig_o
</Frame>
</Application-Entry>
<Application-Entry>
<Delay>0.01</Delay>
<Frame>gh/ho/frTrig_o
</Frame>
</Application-Entry>
</Table-Entrys>
</LN-Schedule-Table>
</Schedule-Tables>"
Try
Dim mXdoc As Xml.XmlDocument = New Xml.XmlDocument
mXdoc.LoadXml(mxmlString)
Dim mdocElement As Xml.XmlElement = mXdoc.DocumentElement
If mdocElement IsNot Nothing AndAlso mdocElement.HasChildNodes Then
Dim LN_Schedule_Table As Xml.XmlNodeList = mdocElement.GetElementsByTagName("LN-Schedule-Table")
Dim Table_Entrys As Xml.XmlNodeList = mdocElement.GetElementsByTagName("Table-Entrys")
For Each mLN_Schedule_Table As Xml.XmlElement In LN_Schedule_Table
Dim Short_Names As Xml.XmlNodeList = mLN_Schedule_Table.GetElementsByTagName("Short-Name")
For Each mShort_Name As Xml.XmlNode In Short_Names
Console.WriteLine("mShort_Name.InnerText = " & mShort_Name.InnerText)
Next
Next
For Each mTable_Entry As Xml.XmlElement In Table_Entrys
Dim Delays As Xml.XmlNodeList = mTable_Entry.GetElementsByTagName("Delay")
Dim Frames As Xml.XmlNodeList = mTable_Entry.GetElementsByTagName("Frame")
For Each mDelay As Xml.XmlNode In Delays
Console.WriteLine("mDelay.InnerText = " & mDelay.InnerText)
Next
For Each mFrame As Xml.XmlNode In Frames
Console.WriteLine("mFrame.InnerText = " & mFrame.InnerText)
Next
Next
End If
Catch ex As Exception
Console.WriteLine(ex.ToString)
End Try
End Sub
или
Чтобы получить все в кадре, вы можете использовать LINQ. Используйте этот пример, чтобы получить общее представление о механизме. Обратите внимание на иерархию потомков и XML форматирование, как я писал в предыдущем примере выше.
Private Sub ReadXML()
Try
Dim mxmlString As String = "<Schedule-Tables>
<LN-Schedule-Table>
<Short-Name>World</Short-Name>
<Position>Start</Position>
<Table-Entrys>
<Application-Entry>
<Delay>0.01</Delay>
<Frame>gh/ho/frTrig_o</Frame>
</Application-Entry>
<Application-Entry>
<Delay>0.01</Delay>
<Frame>gh/ho/frTrig_o</Frame>
</Application-Entry>
</Table-Entrys>
</LN-Schedule-Table>
<LN-Schedule-Table>
<Short-Name>Mars</Short-Name>
<Position>End</Position>
<Table-Entrys>
<Application-Entry>
<Delay>0.01</Delay>
<Frame>gh/ho/frTrig_o</Frame>
</Application-Entry>
<Application-Entry>
<Delay>0.01</Delay>
<Frame>gh/ho/frTrig_o</Frame>
</Application-Entry>
</Table-Entrys>
</LN-Schedule-Table>
</Schedule-Tables>"
Dim mXEL As XElement = XElement.Parse(mxmlString)
Dim dataInAShot = From ScheduleTable In mXEL.Elements("LN-Schedule-Table").AsEnumerable
Select ShortName = ScheduleTable.Descendants("Short-Name").Value,
Position = ScheduleTable.Descendants("Position").Value,
Delay = (ScheduleTable.Descendants("Table-Entrys")).Descendants("Application-Entry").Descendants("Delay").Value,
Frame = (ScheduleTable.Descendants("Table-Entrys")).Descendants("Application-Entry").Descendants("Frame").Value
For Each mData In dataInAShot
Console.WriteLine("ShortName = " & mData.ShortName)
Console.WriteLine("Position = " & mData.Position)
Console.WriteLine("Delay = " & mData.Delay)
Console.WriteLine("Frame = " & mData.Frame)
Console.WriteLine("============================== ")
Next
Catch ex As Exception
Console.WriteLine(ex.ToString)
End Try
End Sub