i ont code suivant:StreamReader override int Read ([In, Out] tampon char [], int index, nombre int)
public class TestStreamReader : StreamReader
{
.
.
public override int Read([In, Out] char[] buffer, int index, int count)
{
char[] charBuffer = new char[buffer.Length];
int i = base.Read(charBuffer, index, count);
string s = new string(charBuffer);
s = s.CleanInvalidXmlChars();
Buffer.BlockCopy(s.ToCharArray(), index, buffer, index, count);
return i;
}
}
Mais si je fais appel suivant:
XmlReaderSettings settings = new XmlReaderSettings
{
DtdProcessing = DtdProcessing.Ignore
};
using (DataSet ds = new DataSet()) {
using (TestStreamReader stream = new TestStreamReader(fileName)) {
using (XmlReader tr = XmlReader.Create(stream, settings)) {
ds.ReadXml(tr);
ImportDataSet(ds);
}
}
}
public static string CleanInvalidXmlChars(this string input)
{
if (string.IsNullOrWhiteSpace(input)) {
return input;
}
return input.Replace(" ", " ");
}
Je reçois une exception:
La balise de démarrage 'Description' de la ligne 53 position 6 ne correspond pas à l'étiquette de fin de 'Descrip'. Ligne 53, position 156. à System.Xml.XmlTextReaderImpl.Throw (Exception e) à System.Xml.TextReaderImpl.ThrowTagMismatch (NodeData startTag) à System.Xml.XmlTextReaderImpl.ParseEndElement() à System.Xml.XmlTextReaderImpl.ParseElementContent()
la raison de l'exception est que la lecture est appelée une seule fois au début et jamais plus pour le chargement suivant des morceaux de données.
Quelqu'un peut-il expliquer pourquoi cela se produit-il?
... et que dit l'exception ...? – mortb
comme je l'ai mentionné la fonction Read a été appelée qu'une seule fois! Donc, je ne reçois qu'une partie du fichier. L'exception est la suivante: La balise de début 'Description' sur la ligne 53 position 6 ne correspond pas à l'étiquette de fin de 'Descrip'. Ligne 53, la position 156. à System.Xml.XmlTextReaderImpl.Throw (Exception e) à System.Xml.XmlTextReaderImpl.ThrowTagMismatch (NodeData STARTTAG) à System.Xml.XmlTextReaderImpl.ParseEndElement() à System.Xml.XmlTextReaderImpl .ParseElementContent() –
Cette exception indique clairement que votre code XML n'est pas valide. Je suppose que vous devez corriger votre méthode 'CleanInvalidXmlChars', que vous n'avez pas partagée avec nous. – Amy