XML Чтение с использованием VB.Net - PullRequest
0 голосов
/ 30 января 2020
This is the sample XML code. 

<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.02</Delay>
        <Frame>gh/ho/frTrig_O</Frame>
      </Application-Entry>
    </Table-entrys>
  </LN-Schedule-Table>
  <LN-Schedule-Table>
    <Short-Name>worldA</Short-Name>
    <Position>Start</Position>
    <Table-entrys>
      <Application-Entry>
        <Delay>0.03</Delay>
        <Frame>gh/ho/frTrig_oZ</Frame>
      </Application-Entry>
      <Application-Entry>
        <Delay>0.04</Delay>
        <Frame>gh/ho/frTrig_oX</Frame>
      </Application-Entry>
    </Table-entrys>
  </LN-Schedule-Table>
</Schedule-Tables>

Мне нужно читать в «Таблице расписания» для каждой «Таблицы расписания LN» необходимо «Короткое имя», а в разделе «Вступление в таблицу» - подробности «Задержка» и «Кадр».

Я новичок в xml, пожалуйста, помогите мне прочитать эту внутреннюю информацию об узле. Спасибо.

Ответы [ 2 ]

1 голос
/ 30 января 2020

Поскольку существует много подходов, этот является одним из них. Но прежде чем вы начнете смотреть на код, вам нужно уделить много внимания вашей строке 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
0 голосов
/ 30 января 2020

Я использовал XElement. Позвольте мне предложить вам поместить это в нажатие кнопки и пройти через это. Я должен был исправить XML, чтобы заставить это работать.

    Dim xe As XElement
    ' to load from a URI
    '   xe = XElement.Load("path here")
    ' for testing use a literal
    xe = <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.02</Delay>
                         <Frame>gh/ho/frTrig_O</Frame>
                     </Application-Entry>
                 </Table-entrys>
             </LN-Schedule-Table>
             <LN-Schedule-Table>
                 <Short-Name>worldA</Short-Name>
                 <Position>Start</Position>
                 <Table-entrys>
                     <Application-Entry>
                         <Delay>0.03</Delay>
                         <Frame>gh/ho/frTrig_oZ</Frame>
                     </Application-Entry>
                     <Application-Entry>
                         <Delay>0.04</Delay>
                         <Frame>gh/ho/frTrig_oX</Frame>
                     </Application-Entry>
                 </Table-entrys>
             </LN-Schedule-Table>
         </Schedule-Tables>

    For Each el As XElement In xe.<LN-Schedule-Table>
        Debug.WriteLine(el.<Short-Name>.Value)
        For Each sel As XElement In el...<Application-Entry>
            Debug.WriteLine(sel.<Delay>.Value)
            Debug.WriteLine(sel.<Frame>.Value)
        Next
    Next
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...