[Gambas-user] Error with XmlWriter tag in gb.xml
Adrien Prokopowicz
adrien.prokopowicz at ...626...
Thu Jun 14 01:16:06 CEST 2012
Le mercredi 13 juin 2012 23:53:02 Ru Vuott a écrit :
> Hello Benoit,
>
> an user of Gambas-it.org Community ask me to write to you about a possible
> error with XmlWriter tag in gb.xml.
>
> He says that he found a problem, linked to the library gb.xml, especially
> with XMLWriter (but there is probably something with XMLReader). Example,
> he has to write an xml file, with a series of nested tags, where most of
> the elements have a single value (Text), such as:
>
> <Tags>
> <Tag1>valore</Tag1>
> <Tag2>valore</Tag2>
> </Tags>
>
> As can be seen, Tag1 and Tag2 have a value, and this is enclosed between the
> opening of the tag "<Tag1>", and its closure "/ Tag1>". Up to now he
> believes the logic is straightforward, and he says that this has so far
> been adopted in all its applications, including pgDesigner (xml file that
> reads a lot).
>
> After downloading the latest version of Gambas3 in source code form, now is
> the 4827, he found that the reading is something wrong (still unclear),
> while the writing has an error, that he has encountered in the source class
> XmlWriter.class, of which he brings the party to the problem:
>
> Public Sub StartElement(TagName As String, Optional Attributes As String[],
> Optional Prefix As String, Optional URI As String)
>
> Dim Xmlns, s, sData As String
> Dim i As Integer = 0
> If URI Then
> Xmlns = " xmlns"
> If Prefix Then Xmlns &= ":" & Prefix
> Xmlns &= "=\"" & URI & "\""
> Endif
> If Prefix Then TagName = Prefix & ":" & TagName
>
> sData = "<" & TagName
>
> If Attributes
> If (Attributes.Count Mod 2) Then Attributes.Push("")
> For i = 0 To Attributes.Max Step 2
> sData &= " " & Attributes[i] & "=\"" & Attributes[i + 1] & "\""
> Next
> Endif
>
> sData &= Xmlns
>
> If Not $TagEnded Then 'On ferme le tag précédent
> Write(">" & If($indent, "\n", ""), True)
> Endif
>
> $TagEnded = False
>
> Write(sData)
>
> PileElements.Push(TagName)
>
> End
>
> Public Sub EndElement()
>
> Dim tag As String
>
> If Not PileElements.Count Then Return
>
> tag = PileElements.Pop()
>
> If Not $TagEnded Then 'On ferme le tag précédent
> Write(" />" & If($indent, "\n", ""), True) 'Pas de contenu
> $TagEnded = True
> Else
> Write("</" & tag & ">")
> Endif
>
> End
>
>
> The user says that the code applies faulty logic, or at least partly by an
> assumption is not entirely correct. The tag is opened and closed by the
> state of the variable $ TagEnded, not taking into account that there may be
> a text value in the middle. This causes the incorrect writing of tags, as
> seen below:
>
> <Tag1valore />
> <Tag2valore />
>
> it combines the name of the tag with the value itself.
> The sequence in which the tag is opened and closed, and associated with this
> value is as an example:
>
> DIM oXml As XmlWriter
> ...
> oXml.StartElement("Tag1")
> oXml.Text("valore")
> oXml.EndElement()
>
>
> With version 3.1.1 it worked, but now our friend user says that with the
> latest updates do not go anymore. I do not know if the 3.1.1, the later
> builds contain all the same problem, but certainly the 4827.
>
>
> Well, this is what he wrote and asked me to tell you. I'll communicate to
> him your answer to this.
>
> Bye
> Vuotttttt
>
>
> ----------------------------------------------------------------------------
> -- Live Security Virtual Conference
> Exclusive live event will cover all the ways today's security and
> threat landscape has changed and how IT managers can respond. Discussions
> will include endpoint security, mobile security and the latest in malware
> threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
> _______________________________________________
> Gambas-user mailing list
> Gambas-user at lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/gambas-user
Hi,
This should be solved in the revision #4829.
Regards,
Adrien.
More information about the User
mailing list