XMLReader/XMLTextReader 클래스에 정말 이상한 문제가 있습니다.XMLReader를 성공적으로 복제 할 수 없습니다 (예기치 않은 EOF)
public void First()
{
XmlTextReader reader = new XmlTextReader(@"C:\MyXMLFile.xml");
XmlReader readerToSerialize;
XmlReader readerToLoad;
DuplicateReaders(reader, out readerToSerialize, out readerToLoad);
XmlSerializer serializer = new XmlSerializer(typeof(XMLTree));
XmlFeed = (XMLDescriptor)serializer.Deserialize(readerToSerialize);
xmlDoc.Load(readerToLoad);
}
protected void DuplicateReaders(XmlTextReader xmlReader, out XmlReader cloneOne, out readerToLoad)
{
XmlDocument _XmlDocument = new XmlDocument();
MemoryStream _Stream = new MemoryStream();
_XmlDocument.Load((XmlTextReader)xmlReader);
_XmlDocument.Save(_Stream);
_Stream.Position = 0L;
cloneOne = XmlReader.Create(_Stream);
_Stream.Position = 0L;
cloneTwo = XmlReader.Create(_Stream);
}
문제는 (복제 된 요소의 하나가, 다음 하나 (xmlDoc.Load)이 같은 장소에 항상 실패 successully 전체 파일을 읽을 수 있다는 것입니다 라인 :
나는 간단한 파일로드가 91,이 xml 파일의 문자 37). 내가 직접 해당 xmldoc에 할당하는 경우 (즉, 한 번만 원래의 요소를 복제하고 기능에서 직접 asign) :public void First()
{
XmlTextReader reader = new XmlTextReader(@"C:\MyXMLFile.xml");
XmlReader readerToSerialize;
DuplicateReaders(reader, out readerToSerialize);
XmlSerializer serializer = new XmlSerializer(typeof(XMLTree));
XmlFeed = (XMLDescriptor)serializer.Deserialize(readerToSerialize);
}
protected void DuplicateReaders(XmlTextReader xmlReader, out XmlReader cloneOne)
{
XmlDocument _XmlDocument = new XmlDocument();
MemoryStream _Stream = new MemoryStream();
_XmlDocument.Load((XmlTextReader)xmlReader);
_XmlDocument.Save(_Stream);
_Stream.Position = 0L;
cloneOne = XmlReader.Create(_Stream);
_Stream.Position = 0L;
this.xmlDoc.Load(_Stream);
}
나는 여전히 같은 오류 37분의 91 (예기치 않은 EOF)을 얻을 수 있지만, 시리얼이 시간 .
내 초기 문제는 xmlDoc.Load(reader)
를 사용하는 경우 독자 인스턴스가 파괴 얻을 있었고, 난 나중에 직렬화 수 없습니다. MSDN 포럼에서 Duplicate 함수를 찾았지만 여전히 문제가 없습니다. 내가 달성하고자하는 것은 매우 간단하다 :
를 사용하여 하나의 리더와 하나 된 XmlDocument 하나의 직렬화 된 클래스를 돌려줍니다. 얼마나 힘들 수 있습니까?
나는 그것을 복제 한 후 (그리고 실제로 복제본을 사용하기 전에) 독자를 닫지 만 여전히 "Unexpected EOF"를 얻는다. – Anonymous
어떤 라인을 종료 하시겠습니까? –
Duplicate 기능 바로 뒤에 메인 리더를 닫고 첫 번째 클론을 사용 직후에 닫습니다. 그러나 두 번째 클론은 EOF를 얻습니다. – Anonymous