XML атрибуты разбора - PullRequest
       3

XML атрибуты разбора

0 голосов
/ 03 апреля 2020

Мой XML Файл выглядит примерно так:

<?xml version="1.0" encoding="utf-8"?>
  <Document>
     <Fruits>
        <Attr N="Orange" V="23.0" />
        <Attr N="Apple" V="10" />
        <Attr N="Pear" V="0.000000" />
     </Fruits>
     <Customer>
        <Attr N="Package" V="Box" />
        <Attr N="Cashier" V="P26" />
        <Attr N="Type" V="2" />
        <Attr N="Policy" V="25C" />
     </Customer>
     <OrderInfo>
        <Attr N="PartNumber" V="CP231" />
        <Attr N="Qty" V="2" />
        <Attr N="Salesman" V="Joe" />
     </OrderInfo>
     <OrderInfo>
        <Attr N="PartNumber" V="CD131" />
        <Attr N="Qty" V="3" />
        <Attr N="Salesman" V="Joe" />
     </OrderInfo>
  </Document>

Я пытаюсь извлечь PartNumber и Qty как N, так и V из OrderInfo, но по какой-то причине мой код никогда не работает, это был мой код, был бы признателен за любую помощь, которую я могу получить.

 Dim xmlSource As New XmlTextReader("Test.xml")
    Dim xml = XDocument.Load(xmlSource)
    Dim trs = xml.Root.Descendants("OrderInfo").ToList()
    For Each CalculatedPrice In trs
        Dim tds = CalculatedPrice.Descendants("Attr")
        For Each Attr As XElement In tds
            Dim atr As XAttribute = Attr.Attribute("N")
            If Not (atr.Value = Nothing) Then
                Console.WriteLine(String.Format("{0}", atr.Value))

            End If
        Next
    Next

Ответы [ 2 ]

0 голосов
/ 03 апреля 2020

Вот рабочий пример.

    Imports System.Xml

    Module Module1
            Const FILENAME As String = "c:\temp\test.xml"

            Sub Main()
                    Dim xml As XmlDocument = New XmlDocument()
                    xml.Load(FILENAME)
' Original, Attributes of OrderInfo

                    For Each ndRow As XmlElement In xml.SelectNodes("//OrderInfo/Attr")
                            Console.WriteLine(ndRow.GetAttribute("N") + ":" + ndRow.GetAttribute("V"))
                    Next

' All attributes for Fruit and OrderInfo
                For Each ndRow As XmlAttribute In xml.SelectNodes("//Attr/@*")
                        Console.WriteLine(ndRow.Value)
                Next

                ' All attributes for just Fruit
                For Each ndRow As XmlAttribute In xml.SelectNodes("//*[not(OrderInfo)]/Attr/@*")
                        Console.WriteLine(ndRow.Value)
                Next

            End Sub

    End Modul
0 голосов
/ 03 апреля 2020

См. Код ниже:

Imports System.Xml
Imports System.Xml.Linq
Module Module1
    Const FILENAME As String = "c:\temp\test.xml"
    Sub Main()
        Dim xml = XDocument.Load(FILENAME)
        Dim trs As List(Of XElement) = xml.Root.Descendants("OrderInfo").ToList()
        For Each CalculatedPrice As XElement In trs
            Dim tds As List(Of XElement) = CalculatedPrice.Descendants("Attr").ToList()
            For Each Attr As XElement In tds
                Dim atr As XAttribute = Attr.Attribute("N")
                If Not (atr.Value = Nothing) Then
                    Console.WriteLine("Name : '{0}', Value : '{1}'", atr.Name.LocalName, CType(atr, String))

                End If
            Next
        Next
    End Sub

End Module
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...