Как контролировать и получать конкретные данные при чтении XML-файла

#vb.net #vb.net-2010 #xmlreader

#vb.net #vb.net-2010 #xmlreader

Вопрос:

Добрый день, у меня есть этот XML-файл:

 <SpectraMagicNX_data>
    <data_set version="2" cdate="2020-12-10T11:34:52 00:00" observer="10">
        <sample>
            <group name="Test1">
                <item name="article">OA</item>
                <item name="number">1</item>
                <item name="state:">Fail</item>
            </group>
            <group name="Test2">
                <item name="article">0B</item>
                <item name="number">1</item>
                <item name="state:">Aprove</item>
            </group>
        </sample>
    </data_set>
</SpectraMagicNX_data>`````
 

И я хочу, когда значение статьи равно 0B, показать значение состояния. Aprove в этом случае

Код

 
        Do While (reader.Read())
            Select Case reader.NodeType
                Case XmlNodeType.Element
                    If reader.HasAttributes Then 'Se existirem atributos
                        While reader.MoveToNextAttribute()
                            If reader.Value = "OA" Then
                                MsgBox(reader.Value)
                            End If
                        End While
                    End If
                Case XmlNodeType.Text
                    MsgBox(reader.Value)
            End Select
        Loop`````
 

Я не знаю, использую ли я лучший способ, но я хочу что-то простое для понимания.

Читатель.Значение в основном показывает значение каждого атрибута, и я не могу это контролировать. И поэтому я хочу знать, как управлять группой, элементом и его значением

Ответ №1:

Пример использования различных функций. Он выбирает узел на основе элемента. Затем он получает состояние для этого элемента.

     ' https://docs.microsoft.com/en-us/dotnet/standard/linq/linq-xml-overview
    Dim xe As XElement
    ' xe = XElement.Load("path to XML here") 'for production use this
    'for testing use literal
    xe = <SpectraMagicNX_data>
             <data_set version="2" cdate="2020-12-10T11:34:52 00:00" observer="10">
                 <sample>
                     <group name="Test1">
                         <item name="article">OA</item>
                         <item name="number">1</item>
                         <item name="state:">Fail</item>
                     </group>
                     <group name="Test2">
                         <item name="article">0B</item>
                         <item name="number">1</item>
                         <item name="state:">Aprove</item>
                     </group>
                 </sample>
             </data_set>
         </SpectraMagicNX_data>

    ' select the first <group> that has an item with a 
    '  name attribute="article" and value of OA

    Dim ie As IEnumerable(Of XElement)
    ' use LINQ
    ie = From el In xe...<group>.<item>
          Where el.@name = "article" AndAlso el.Value = "OA"
          Select el.Parent Take 1

    If ie.Count = 1 Then
        Dim ItemState As String
        ItemState = (From el In ie(0).Elements
                     Where el.@name = "state:"
                     Select el.Value).FirstOrDefault.ToString
        Stop 'look at ItemState
    End If
 

Комментарии:

1. Спасибо, вы показали учебник по C # linq-xml-overview. Есть ли это в XML? или где я могу увидеть больше примеров использования linq? Потому что, если я хочу разместить каждый элемент в группе в itemstate, что мне нужно сделать?

2. @PedroPinheiro — в верхней части страницы должен быть выпадающий список, позволяющий изменить язык. На моем написано VB. Перейдите по ссылкам для получения дополнительной информации. Вы также можете использовать этот поиск docs.microsoft.com/en-us/search/?terms=xelementamp;scope=.NET