Element vide XML découpé en 2 lignes

Signaler
Messages postés
66
Date d'inscription
lundi 23 avril 2007
Statut
Membre
Dernière intervention
26 mars 2019
-
Messages postés
66
Date d'inscription
lundi 23 avril 2007
Statut
Membre
Dernière intervention
26 mars 2019
-
Bonjour,

J'ai un document XML qui est "bindé" à des textbox (WPF).
Dim systemdata As XmlDataProvider = New XmlDataProvider()
Private Sub MainWindow_Loaded(sender As Object, e As System.Windows.RoutedEventArgs) Handles Me.Loaded
        systemdata.Source = New Uri("fichier.xml")
        systemdata.XPath = "Base"
        Grid1.DataContext = systemdata
End Sub

Et il est sauvé ainsi:
systemdata.Document.Save("fichier.xml")



Par ailleurs, dans le code VB, je dois détecter les éléments vides à l'intérieur de ce même fichier XML. J'ouvre donc le fichier XML et je lis l'élément dont j'ai besoin et le place dans une variable:
Dim sysname As String = ""
Dim XmlReader As New XmlTextReader("Fichier.xml")
        While XmlReader.Read()
            If (XmlReader.NodeType = XmlNodeType.Element) Then
                If (XmlReader.Name = "Name") Then
                    sysname = XmlReader.ReadString()
                End If
            End If

A la fin de l'élément, je voudrais vérifier de quoi il était rempli..et notamment si il est vide:
            If (XmlReader.Name "Name" And XmlReader.NodeType XmlNodeType.EndElement) Then
                If sysname = String.Empty Then
                    MsgBox("Element Vide", 48, "Attention")
                End If
            End If
        End While
XmlReader.Close()


Là, je me rend compte que les éléments vides ne sont pas détectés.
En regardant le fichier XML de plus près, je me rend compte que lorsqu'il est sauvé (systemdata.Document.Save("fichier.xml"), il y a un reformatage qui est effectué!
Un élément vide de ce type:
<Name></Name>

se voit sauvé en:
<Name>
</Name>


Il y a donc vraisemblablement un CRLF (line break carriage return)...qui fait qu'il n'est pas détecté comme ""/String.Empty!?

Ma question est donc la suivante:
Comment puis-je prévenir le "reformatage" de mon fichier XML...et maintenir les éléments vides sur une seule ligne?

Merci!!!

2 réponses


Bonsoir,

Regarde du côté de PreserveWhitespace
Messages postés
66
Date d'inscription
lundi 23 avril 2007
Statut
Membre
Dernière intervention
26 mars 2019
2
J'ai trouvé la réponse: j'enlève à la variable les caractères superflus

Dim sysname As String = "" 
Dim XmlReader As New XmlTextReader("Fichier.xml") 
While XmlReader.Read() 
If (XmlReader.NodeType = XmlNodeType.Element) Then 
If (XmlReader.Name = "Name") Then 
sysname = XmlReader.ReadString()
sysname = sysname.Replace(vbCr, "").Replace(vbLf, "").Replace(" ", "")
End If 
End If