Hej Om XmlTextReader'n har läst in följande tag: Hej Jo, det ska funka. Propertyn på xmltextreadern heter egentligen Item. Det går lika bra att skriva så här: Nepp det går inge bra detta. Hittade några fel i xml'en. Det saknas = vid value-attributet, samt några taggar börjar med <<. Jag fick det att funka med denna xml'en: OK Nu har jag lyckats loopa ut Attrributvärden, men när jag samtidigt försöker göra detsamma med övriga värden som ligger inom huvudtaggen <CONTACT>....</CONTACT> så tar de ut varandra. Moment 22 alltså! Vad menar du med att de tar ut varandra? Läsa attributvärden i XML-taggar
Jag har en exempelkod skriven i VB.NET och en exempel XML-fil nedan.
Jag vill även lyfta ut värden från attributen som finns i XML-taggarna. Någon som har någon hyfsat 'enkel' lösning för sådant??
Aktuell kod loopar endast genom värden som har en definerad start resp sluttagg, och huvudvärken börjar som sagt när jag försöker blanda in attributen.
Programkoden:
------------------------
Imports System.Xml
Imports System.Xml.Serialization
Public Class Form1
Inherits System.Windows.Forms.Form
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim FileName As String = "C:\AddressBook.xml"
Dim Reader As New XmlTextReader(FileName)
Reader.MoveToContent()
Dim addressData As Collection, elementName As String
Do While Reader.Read
Select Case Reader.NodeType
Case XmlNodeType.Element
If Reader.Name = "CONTACT" Then
addressData = New Collection
Else
elementName = Reader.Name
End If
Case XmlNodeType.Text
If Not addressData Is Nothing Then
addressData.Add(Reader.Value, elementName)
End If
Case XmlNodeType.EndElement
If Reader.Name = "CONTACT" Then
Dim item As String
Try
item = addressData("FirstName") & " " & addressData("LastName") & " (" & addressData("Email") & ")"
Catch
End Try
TextBox1.Items.Add(item)
addressData = Nothing
End If
End Select
Loop
End Sub
End Class
XML-filen:
------------------------
<?xml version="1.0"?>
<AddressBook xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Addresses version="1.0">
<MAIN class="01008000">
<CONTACT label="Bosse" value"test1">
<FirstName>Bosse</FirstName>
<LastName>Andersson</LastName>
<Company>Företaget AB</Company>
<Address>123 Huvudgatan</Address>
<City>Staden</City>
<Email>bosse@home.se</Email>
</CONTACT>
<CONTACT label="Lasse" value"test2">
<FirstName>Lasse</FirstName>
<LastName>Johansson</LastName>
<Company>Företaget AB</Company>
<<Address>123 Huvudgatan</Address>
<City>Staden</City>
<Email>lasse@home.se</Email>
<CONTACT label="Hasse" value"test3">
<FirstName>Hasse</FirstName>
<LastName>Persson</LastName>
<Company>Företaget AB</Company>
<<Address>123 Huvudgatan</Address>
<City>Staden</City>
<Email>hasse@home.se</Email>
</CONTACT>
</CONTACT>
</MAIN>
</Addresses>
</AddressBook>Sv: Läsa attributvärden i XML-taggar
<Addresses version="1.0">
kan du skriva:
reader("version")
mvh MichaelSv:Läsa attributvärden i XML-taggar
det verkar inte hjälpa, troligen saknas det någon class som behövs för att dyka ned i attributen. Jag har laborerat med olika sådana och ändrat XmlNodeType fram och tillbaka. Sv: Läsa attributvärden i XML-taggar
reader.Item("version")
Kan även indexera dig fram till rätt värde:
reader(0)Sv:Läsa attributvärden i XML-taggar
Och plötsligt vill inte loopen vara med längre.
FELMEDDELANDE
Do While Reader.Read ' är en oväntad token
Vad nu det är för något...?
............................Hittade felet..... åäö gillas INTESv: Läsa attributvärden i XML-taggar
<?xml version="1.0"?>
<AddressBook xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Addresses version="1.0">
<MAIN class="01008000">
<CONTACT label="Bosse" value="test1">
<FirstName>Bosse</FirstName>
<LastName>Andersson</LastName>
<Company>Företaget AB</Company>
<Address>123 Huvudgatan</Address>
<City>Staden</City>
<Email>bosse@home.se</Email>
</CONTACT>
<CONTACT label="Lasse" value="test2">
<FirstName>Lasse</FirstName>
<LastName>Johansson</LastName>
<Company>Företaget AB</Company>
<Address>123 Huvudgatan</Address>
<City>Staden</City>
<Email>lasse@home.se</Email>
</CONTACT>
<CONTACT label="Hasse" value="test3">
<FirstName>Hasse</FirstName>
<LastName>Persson</LastName>
<Company>Företaget AB</Company>
<Address>123 Huvudgatan</Address>
<City>Staden</City>
<Email>hasse@home.se</Email>
</CONTACT>
</MAIN>
</Addresses>
</AddressBook> Sv:Läsa attributvärden i XML-taggar
Kan du beskriva vad du ändrade i VB-koden för att få allt att funka?
Jag lyckades inte... :-(
Jag vill som sagt även loopa ut Attributvärden tillsammans med övriga värden...
<CONTACT label="värde" value="värde">eventuellt värde
<FirstName>Värde</FirstName>
<LastName>Värde</LastName>
<Company>Värde</Company>
<Address>Värde</Address>
<City>Värde</City>
<Email>Värde</Email>
</CONTACT>Sv: Läsa attributvärden i XML-taggar
ALLA TIPS ÄR VÄLKOMNA....
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim FileName As String = "C:\Downloads\VBNET\XML\XMLRapport\AddressBook.xml"
Dim Reader As New XmlTextReader(FileName)
TextBox1.Text = ""
Dim LABEL As String
Dim VARDE As String
Do While Reader.Read
Select Case Reader.NodeType
Case XmlNodeType.Element
If Reader.Name.Equals("CONTACT") Then
' Attributvärden hämtas
Try
LABEL = Reader.Item("label")
VARDE = Reader.Item("value")
Catch ex As Exception
End Try
TextBox1.Text &= LABEL & " " & VARDE & vbCrLf
End If
End Select
Loop
End Sub
End ClassSv:Läsa attributvärden i XML-taggar
Se min kommentar nedan hur du ska komma åt det underliggande.
Do While Reader.Read
Select Case Reader.NodeType
Case XmlNodeType.Element
If Reader.Name.Equals("CONTACT") Then
' Attributvärden hämtas
Try
LABEL = Reader.Item("label")
VARDE = Reader.Item("value")
Catch ex As Exception
End Try
TextBox1.Text &= LABEL & " " & VARDE & vbCrLf
' ------------ Här kan du göra Reader.Read()
' för att komma åt childelements till CONTACT
' t.ex. i en ny loop här (nästlad)
End If
End Select
Loop