0
我有以下代碼:StreamReader的覆蓋INT讀([輸入,輸出]的char []緩衝區,詮釋指數,詮釋計數)
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行的'Description'開始標記與'Descrip'的結束標記不匹配。線53,位置156在System.Xml.XmlTextReaderImpl.Throw(例外五)在System.Xml.XmlTextReaderImpl.ThrowTagMismatch(NODEDATA STARTTAG)在System.Xml.XmlTextReaderImpl.ParseEndElement()在System.Xml.XmlTextReaderImpl.ParseElementContent()
這個例外的原因是Read只在開始時被調用一次,而在加載下一個數據塊時永遠不會調用Read。
任何人都可以解釋爲什麼會發生這種情況?
...又是什麼異常說...? – mortb
正如我提到的函數Read只被調用一次!所以我只得到了一部分文件。例外情況是:第53行第6位的'描述'開始標記與'Descrip'的結束標記不匹配。線53,位置156 在System.Xml.XmlTextReaderImpl.Throw(例外五) 在System.Xml.XmlTextReaderImpl.ThrowTagMismatch(NODEDATA STARTTAG) 在System.Xml.XmlTextReaderImpl.ParseEndElement() 在System.Xml.XmlTextReaderImpl .ParseElementContent() –
該異常清楚地表明你的XML是無效的。我猜你需要修正你的'CleanInvalidXmlChars'方法,你還沒有與我們分享。 – Amy