Le lecteur XML semble être sensible à l'espace blanc autour des éléments vides.XmlReader sensible aux espaces entre les éléments
Si j'ai un élément vide sans espaces (<B />
) alors le lecteur ne le voit pas comme un élément.
public static void Main()
{
WriteLine("No spaces around <B>.");
using (var stringReader = new StringReader(@"<Index><A>a</A><B /><C>c</C></Index>"))
using (var reader = XmlReader.Create(stringReader))
{
while (reader.Read())
{
if (reader.Name != "Index" && reader.NodeType == XmlNodeType.Element)
{
WriteLine("{0}: {1}", reader.Name, reader.ReadElementContentAsString());
}
}
}
WriteLine();
WriteLine("Spaces added around <B>.");
using (var stringReader = new StringReader(@"<Index><A>a</A> <B /> <C>c</C></Index>"))
using (var reader = XmlReader.Create(stringReader))
{
while (reader.Read())
{
if (reader.Name != "Index" && reader.NodeType == XmlNodeType.Element)
{
WriteLine("{0}: {1}", reader.Name, reader.ReadElementContentAsString());
}
}
}
Read();
}
L'impression des valeurs donne l'impression de le voir. Ici, je suis l'impression de nos types trouvés dans l'ordre (moins l'instruction if ci-dessus):
No spaces around <B>. Spaces added around <B>.
Index: Element Index: Element
A: Element A: Element
: Text : Text
A: EndElement A: EndElement
B: Element : Whitespace
C: Element B: Element
: Text : Whitespace
C: EndElement C: Element
Index: EndElement : Text
C: EndElement
Index: EndElement
Le problème semble être avec l'énoncé:
reader.ReadElementContentAsString()
Si je retire cette déclaration je reçois B
apparaissant à nouveau. Je pensais que cela pourrait être quelque chose à faire avec cette méthode en déplaçant le reader
au nœud suivant (?) Mais je n'arrive pas à le prouver ou à le contourner. Comment gérer les nœuds vides avec le XmlReader
?
Ressemble à une copie de [XmlReader - problème de lecture du fichier xml sans saut de ligne] (https://stackoverflow.com/q/7196468/3744182) et [Pourquoi mon lecteur XML lit-il tous les autres éléments?] (Https: //stackoverflow.com/q/10038193/3744182). – dbc
Et aussi [C# XMLReader ignore les nœuds après l'utilisation de ReadElementContentAs] (https://stackoverflow.com/a/24991311/3744182). – dbc