XmlReader ConformanceLevel.Fragment, Martijn, , XmlDataDocument .
, , , , . XML- (XmlDocument, XDocument, XmlDataDocument) TextReader , . :
var dataDocument = new XmlDataDocument();
dataDocument.Load(new FakeRootStreamReader(File.OpenRead("test.xml")));
:
public class FakeRootStreamReader : TextReader
{
private static readonly char[] _rootStart;
private static readonly char[] _rootEnd;
private readonly TextReader _innerReader;
private int _charsRead;
private bool _eof;
static FakeRootStreamReader()
{
_rootStart = "<root>".ToCharArray();
_rootEnd = "</root>".ToCharArray();
}
public FakeRootStreamReader(Stream stream)
{
_innerReader = new StreamReader(stream);
}
public FakeRootStreamReader(TextReader innerReader)
{
_innerReader = innerReader;
}
public override int Read(char[] buffer, int index, int count)
{
if (!_eof && _charsRead < _rootStart.Length)
{
return ReadFake(_rootStart, buffer, index, count);
}
if (!_eof)
{
int charsRead = _innerReader.Read(buffer, index, count);
if (charsRead > 0) return charsRead;
_eof = true;
_charsRead = 0;
}
return ReadFake(_rootEnd, buffer, index, count);
}
private int ReadFake(char[] source, char[] buffer, int offset, int count)
{
int length = Math.Min(source.Length - _charsRead, count);
Array.Copy(source, _charsRead, buffer, offset, length);
_charsRead += length;
return length;
}
}
Read(...) <root>. , , , .
... meh... , , , - 6 .