#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