#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)