XML read problem in VB.Net

userxyz

Member
Join Date
May 2002
Location
any
Posts
2,768
Hi,

I have working code for writing to XML.
The reading doesn't go that smooth as the writing :)

This is my code:

Code:
    Public Sub XMLRead(ByVal IP, ByVal Slot, ByVal Interval,
                        ByVal RcvBitDBnr, ByVal RcvBitindex,
                        ByVal RcvWordDBnr, ByVal RcvWordindex,
                        ByVal RcvDWordDBnr, ByVal RcvDWordindex,
                        ByVal RcvFloatDBnr, ByVal RcvFloatindex,
                        ByVal SndBitDBnr, ByVal SndBitindex, ByVal Snd*****ecked,
                        ByVal SndWordDBnr, ByVal SndWordindex, ByVal SndWord,
                        ByVal SndDWordDBnr, ByVal SndDWordindex, ByVal SndDWord,
                        ByVal SndFloatDBnr, ByVal SndFloatindex, ByVal SndFloat)

        Dim XmlRd As XmlReader = New XmlTextReader(XMLFileName)

        While XmlRd.Read()
                Dim type = XmlRd.NodeType
            If type = XmlNodeType.Element Then
                If XmlRd.Name = "IP" Then
                    IP = XmlRd.ReadInnerXml()
                End If
                If XmlRd.Name = "Slot" Then
                    Slot = XmlRd.ReadInnerXml()
                End If
                If XmlRd.Name = "Interval" Then
                    Interval = XmlRd.ReadInnerXml()
                End If
                If XmlRd.Name = "RcvBitDBnr" Then
                    RcvBitDBnr = XmlRd.ReadInnerXml()
                End If
                If XmlRd.Name = "RcvBitindex" Then
                    RcvBitindex = XmlRd.ReadInnerXml()
                End If
                If XmlRd.Name = "RcvWordDBnr" Then
                    RcvWordDBnr = XmlRd.ReadInnerXml()
                End If
                If XmlRd.Name = "RcvWordindex" Then
                    RcvWordindex = XmlRd.ReadInnerXml()
                End If
                If XmlRd.Name = "RcvDWordDBnr" Then
                    RcvDWordDBnr = XmlRd.ReadInnerXml()
                End If
                If XmlRd.Name = "RcvDWordindex" Then
                    RcvDWordindex = XmlRd.ReadInnerXml()
                End If
                If XmlRd.Name = "RcvFloatDBnr" Then
                    RcvFloatDBnr = XmlRd.ReadInnerXml()
                End If
                If XmlRd.Name = "RcvFloatindex" Then
                    RcvFloatindex = XmlRd.ReadInnerXml()
                End If
                If XmlRd.Name = "SndBitDBnr" Then
                    SndBitDBnr = XmlRd.ReadInnerXml()
                End If
                If XmlRd.Name = "SndBitindex" Then
                    SndBitindex = XmlRd.ReadInnerXml()
                End If
                If XmlRd.Name = "Snd*****ecked" Then
                    Snd*****ecked = XmlRd.ReadInnerXml()
                End If
                If XmlRd.Name = "SndWordDBnr" Then
                    SndWordDBnr = XmlRd.ReadInnerXml()
                End If
                If XmlRd.Name = "SndWordindex" Then
                    SndWordindex = XmlRd.ReadInnerXml()
                End If
                If XmlRd.Name = "SndWord" Then
                    SndWord = XmlRd.ReadInnerXml()
                End If
                If XmlRd.Name = "SndDWordDBnr" Then
                    SndDWordDBnr = XmlRd.ReadInnerXml()
                End If
                If XmlRd.Name = "SndDWordindex" Then
                    SndDWordindex = XmlRd.ReadInnerXml()
                End If
                If XmlRd.Name = "SndDWord" Then
                    SndDWord = XmlRd.ReadInnerXml()
                End If
                If XmlRd.Name = "SndFloatDBnr" Then
                    SndFloatDBnr = XmlRd.ReadInnerXml()
                End If
                If XmlRd.Name = "SndFloatindex" Then
                    SndFloatindex = XmlRd.ReadInnerXml()
                End If
                If XmlRd.Name = "SndFloat" Then
                    SndFloat = XmlRd.ReadInnerXml()
                End If
            End If
        End While
    End Sub

Any idea what's wrong in the code ?
The code doesn't crash, but nothing is red from the XML file.

Thanks,

Regards,
G
 
This is kind of a shot in the dark, but the first thing I would try is this:

Dim XmlRd As XmlTextReader = New XmlTextReader(XMLFileName)

The ReadInnerXml is an overridable function in the XmlReader class. By declaring XmlRd as an XxmlReader instead of XmlTextReader, it may be using the method from the base class, but XmlTextReader may have it's own implementation of ReadInnerXml
 
Tnx

Tnx for your reply.

I tried what you said, but same result...
Could it because of the way I write into XML, I mean the structure I have:

Code:
<?xml version="1.0" encoding="utf-8"?>
<!--XML Database.-->
<Data>
  <IP>0.0.0.0</IP>
  <Slot>2</Slot>
  <Interval>500</Interval>
  <RcvBitDBnr>0</RcvBitDBnr>
  <RcvBitindex>0</RcvBitindex>
  <RcvWordDBnr>6</RcvWordDBnr>
  <RcvWordindex>0</RcvWordindex>
  <RcvDWordDBnr>0</RcvDWordDBnr>
  <RcvDWordindex>0</RcvDWordindex>
  <RcvFloatDBnr>0</RcvFloatDBnr>
  <RcvFloatindex>0</RcvFloatindex>
  <SndBitDBnr>0</SndBitDBnr>
  <SndBitindex>0</SndBitindex>
  <Snd*****ecked>False</Snd*****ecked>
  <SndWordDBnr>0</SndWordDBnr>
  <SndWordindex>0</SndWordindex>
  <SndWord>0</SndWord>
  <SndDWordDBnr>0</SndDWordDBnr>
  <SndDWordindex>0</SndDWordindex>
  <SndDWord>0</SndDWord>
  <SndFloatDBnr>0</SndFloatDBnr>
  <SndFloatindex>0</SndFloatindex>
  <SndFloat>0</SndFloat>
</Data>

Tnx,
Kind regards,
G
 
I just noticed that you have a subroutine that passes many parameters, but in your code, you immediately overwrite all of the passed parameters. Since these parameters are passed ByVal, their lifetime only exists within the subroutine.

Try putting a breakpoint at End Sub, then run the app. When it hits the breakpoint, hover over your variables and I think you will see that it read the values.
 
The following corrected code works fine.

1- Replace your ByVal with ByRef.
2- Get rid of '*' characters in Snd*****ecked (both in VB and XML file).
-----------------------------------------------------------------------------------
Imports System.Xml

Public Class Form1
Public Sub XMLRead(ByRef IP, ByRef Slot, ByRef Interval,
ByRef RcvBitDBnr, ByRef RcvBitindex,
ByRef RcvWordDBnr, ByRef RcvWordindex,
ByRef RcvDWordDBnr, ByRef RcvDWordindex,
ByRef RcvFloatDBnr, ByRef RcvFloatindex,
ByRef SndBitDBnr, ByRef SndBitindex, ByRef Sndecked,
ByRef SndWordDBnr, ByRef SndWordindex, ByRef SndWord,
ByRef SndDWordDBnr, ByRef SndDWordindex, ByRef SndDWord,
ByRef SndFloatDBnr, ByRef SndFloatindex, ByRef SndFloat)

Dim XmlRd As XmlReader = New XmlTextReader("C:\\Temp\\test.xml")

While XmlRd.Read()
Dim type = XmlRd.NodeType
If type = XmlNodeType.Element Then
If XmlRd.Name = "IP" Then
IP = XmlRd.ReadInnerXml()
End If
If XmlRd.Name = "Slot" Then
Slot = XmlRd.ReadInnerXml()
End If
If XmlRd.Name = "Interval" Then
Interval = XmlRd.ReadInnerXml()
End If
If XmlRd.Name = "RcvBitDBnr" Then
RcvBitDBnr = XmlRd.ReadInnerXml()
End If
If XmlRd.Name = "RcvBitindex" Then
RcvBitindex = XmlRd.ReadInnerXml()
End If
If XmlRd.Name = "RcvWordDBnr" Then
RcvWordDBnr = XmlRd.ReadInnerXml()
End If
If XmlRd.Name = "RcvWordindex" Then
RcvWordindex = XmlRd.ReadInnerXml()
End If
If XmlRd.Name = "RcvDWordDBnr" Then
RcvDWordDBnr = XmlRd.ReadInnerXml()
End If
If XmlRd.Name = "RcvDWordindex" Then
RcvDWordindex = XmlRd.ReadInnerXml()
End If
If XmlRd.Name = "RcvFloatDBnr" Then
RcvFloatDBnr = XmlRd.ReadInnerXml()
End If
If XmlRd.Name = "RcvFloatindex" Then
RcvFloatindex = XmlRd.ReadInnerXml()
End If
If XmlRd.Name = "SndBitDBnr" Then
SndBitDBnr = XmlRd.ReadInnerXml()
End If
If XmlRd.Name = "SndBitindex" Then
SndBitindex = XmlRd.ReadInnerXml()
End If
If XmlRd.Name = "Sndecked" Then
Sndecked = XmlRd.ReadInnerXml()
End If
If XmlRd.Name = "SndWordDBnr" Then
SndWordDBnr = XmlRd.ReadInnerXml()
End If
If XmlRd.Name = "SndWordindex" Then
SndWordindex = XmlRd.ReadInnerXml()
End If
If XmlRd.Name = "SndWord" Then
SndWord = XmlRd.ReadInnerXml()
End If
If XmlRd.Name = "SndDWordDBnr" Then
SndDWordDBnr = XmlRd.ReadInnerXml()
End If
If XmlRd.Name = "SndDWordindex" Then
SndDWordindex = XmlRd.ReadInnerXml()
End If
If XmlRd.Name = "SndDWord" Then
SndDWord = XmlRd.ReadInnerXml()
End If
If XmlRd.Name = "SndFloatDBnr" Then
SndFloatDBnr = XmlRd.ReadInnerXml()
End If
If XmlRd.Name = "SndFloatindex" Then
SndFloatindex = XmlRd.ReadInnerXml()
End If
If XmlRd.Name = "SndFloat" Then
SndFloat = XmlRd.ReadInnerXml()
End If
End If
End While
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim IP As String = ""
Dim Slot As String = ""
Dim Interval As String = ""
Dim RcvBitDBnr As String = ""
Dim RcvBitindex As String = ""
Dim RcvWordDBnr As String = ""
Dim RcvWordindex As String = ""
Dim RcvDWordDBnr As String = ""
Dim RcvDWordindex As String = ""
Dim RcvFloatDBnr As String = ""
Dim RcvFloatindex As String = ""
Dim SndBitDBnr As String = ""
Dim SndBitindex As String = ""
Dim Sndecked As String = ""
Dim SndWordDBnr As String = ""
Dim SndWordindex As String = ""
Dim SndWord As String = ""
Dim SndDWordDBnr As String = ""
Dim SndDWordindex As String = ""
Dim SndDWord As String = ""
Dim SndFloatDBnr As String = ""
Dim SndFloatindex As String = ""
Dim SndFloat As String = ""
XMLRead(IP, Slot, Interval,
RcvBitDBnr, RcvBitindex,
RcvWordDBnr, RcvWordindex,
RcvDWordDBnr, RcvDWordindex,
RcvFloatDBnr, RcvFloatindex,
SndBitDBnr, SndBitindex, Sndecked,
SndWordDBnr, SndWordindex, SndWord,
SndDWordDBnr, SndDWordindex, SndDWord,
SndFloatDBnr, SndFloatindex, SndFloat)

End Sub

End Class
 
must try

Hi guys,

I don't know where the **** come from, I dont have them in my code.
Okay, thanks a lot. I will try this evening with Byref.

Kind regards
G
 
Hi guys,

I don't know where the **** come from, I dont have them in my code.
Okay, thanks a lot. I will try this evening with Byref.

Kind regards
G
It seems that the forum software is sanitizing your post.
2- Get rid of '*' characters in Snd*****ecked (both in VB and XML file).

Code:
Snd [COLOR=Red]Bit Ch[/COLOR]ecked
    ^^^ ^^
 

Similar Topics

Hi everyone, I have an issue, how is it possible to read data from an XML file with Delta PLC? In fact, I have another device (ElectroCell from...
Replies
1
Views
1,132
Hello, I have a project where I need to use a CLX to communicate with a 3rd party device that exchanges data via XML formatted commands and HTTP...
Replies
4
Views
1,657
As per title, I am looking for a way to import the design paths for factorytalk studio. I don't have a personal work laptop but use one of 3 or 4...
Replies
0
Views
2,118
Good Afternoon , When I open FactoryTalk View ME . I go to open it up and I get the following message. " The correct version of the...
Replies
0
Views
970
can anyone tell me how to convert .RSS file to L5x or Xml
Replies
2
Views
2,480
Back
Top Bottom