Чтение элемента XML-файла и значения между

#xml #vb.net #visual-studio #xmlreader

#xml #vb.net #visual-studio #xmlreader

Вопрос:

Я искал и просто не могу найти то, что ищу… Я хочу получить все элементы и отобразить (если есть) содержимое в теге?

пример XML-тега:

 <username>pavle_stoj</username>
 

вывод в консоль:

 username : pavle_stoj
 

У меня возникли проблемы с его решением?

 Imports System.Xml
Module Module1
    Sub Main()

    If IO.File.Exists("C:UsersPavleDesktopconfig.xml") Then
        Dim XmlReader As XmlReader = XmlReader.Create("C:UsersPavleDesktopconfig.xml")
        With XmlReader
            While .Read()
                If .NodeType = XmlNodeType.Element Then
                    If .IsStartElement() Then


                        Console.WriteLine("Element Name: "   .Name)
                        'Value Of Element: -> ???

                End If
            End While
        End With
        Console.Write(".. press any key ..")
        Console.ReadLine()
    Else
        Console.WriteLine("The filename you selected was not found.")
    End If
End Sub
 

Конечный модуль

XML-файл:

 <?xml version="1.0" encoding="utf-8"?>
<configfile>
 
<database_settings>
    <databasename>peopledb</databasename>
    <databaseuser>sa</databaseuser>
    <databasepassword>verysecurepassword</databasepassword>
</database_settings>
 
<domain_admin_settings>
    <username>myusername</username>
    <password>verysecurepassword</password>
    <domain>windowstest.local</domain>
</domain_admin_settings>
 
</configfile>
 

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

1. XmlReader. GetValueAsync может помочь вам двигаться в правильном направлении docs.microsoft.com/en-us/dotnet/api /…

2. @Hursey это не решает актуальную проблему OP. Павел, можешь ли ты привести пример XML-файла, чтобы я мог тебе помочь? Короче говоря, вы можете создавать объекты, которые представляют ваши данные, а затем получать все, что вам нужно.

3. я добавил XML-файл сюда: pastebin.com/pFY6YkNm … в нем нет ничего особенного, простого для анализа информации в программе — тоже добавил сообщение

Ответ №1:

Я делаю тест на основе вашего описания, и следующий код работает для меня:

 Sub Main()
    Dim path As String = "your xml path"
    If IO.File.Exists(path) Then
        Using reader As XmlReader = XmlReader.Create(path)
            reader.MoveToContent()
            While reader.Read()
                If reader.NodeType = XmlNodeType.Element Then
                    If reader.Name = "username" Then
                        Dim el As XElement = TryCast(XNode.ReadFrom(reader), XElement)
                        If el IsNot Nothing Then
                            Console.WriteLine(el.Value)
                        End If
                    End If
                End If
            End While
        End Using

        Console.Write(".. press any key ..")
        Console.ReadLine()
    Else
        Console.WriteLine("The filename you selected was not found.")
    End If
End Sub
 

Результат моего теста.

введите описание изображения здесь

Ответ №2:

Использование XElement…

     Dim path As String = "your path here"
    Dim xe As XElement
    ' xe = XElement.Load(path) 'Production

    ' for TESTING use literal.  Get rid of this for production
    xe = <configfile>

             <database_settings>
                 <databasename>peopledb</databasename>
                 <databaseuser>sa</databaseuser>
                 <databasepassword>verysecurepassword</databasepassword>
             </database_settings>

             <domain_admin_settings>
                 <username>myusername</username>
                 <password>verysecurepassword</password>
                 <domain>windowstest.local</domain>
             </domain_admin_settings>

         </configfile>

    Dim s As String = String.Format("Element name: {0}  Value: {1}",
                                        xe.<domain_admin_settings>.<username>.First.Name,
                                        xe.<domain_admin_settings>.<username>.Value)

    Console.WriteLine(s)
 

Производство выглядит следующим образом

     Dim path As String = "your path here"
    Dim xe As XElement
    xe = XElement.Load(path) 'Production

    Dim s As String = String.Format("Element name: {0}  Value: {1}",
                                        xe.<domain_admin_settings>.<username>.First.Name,
                                        xe.<domain_admin_settings>.<username>.Value)

    Console.WriteLine(s)