я следующий код:StreamReader переопределение INT Read ([In, Out] символ [] буфер 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;
}
}
Но если я следующий вызов:
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(" ", " ");
}
Я получаю исключение:
Начальный тег «Описание» в строке 53 позиции 6 не соответствует тегу конца «Descrip». Строка 53, позиция 156. в System.Xml.XmlTextReaderImpl.Throw (исключение e) в System.Xml.XmlTextReaderImpl.ThrowTagMismatch (NodeData startTag) в System.Xml.XmlTextReaderImpl.ParseEndElement() в System.Xml.XmlTextReaderImpl.ParseElementContent()
Причиной исключения является то, что Read вызывается только один раз в начале и не более для загрузки следующих фрагментов данных.
Может кто-нибудь объяснить, почему это происходит?
... и что говорит исключение ...? – mortb
Как я уже говорил, функция Read была вызвана только один раз! Поэтому я получаю только часть из файла. Исключением является: Начальный тег «Описание» в строке 53 позиции 6 не совпадает с конечным тегом «Descrip». Линия 53, позиция 156. в System.Xml.XmlTextReaderImpl.Throw (Exception е) в System.Xml.XmlTextReaderImpl.ThrowTagMismatch (NodeData начальныйТег) в System.Xml.XmlTextReaderImpl.ParseEndElement() в System.Xml.XmlTextReaderImpl .ParseElementContent() –
Это исключение явно указывает, что ваш XML недопустим. Я предполагаю, что вам нужно исправить свой метод «CleanInvalidXmlChars», который вы не поделили с нами. – Amy