2010-08-17 3 views
7

엔티티를 확장하고 조작하지 않고 XML 문서를 읽으려고 시도하고 확장되지 않은 엔티티를 초기 상태로 다시 저장하려고합니다.XmlTextReader가 엔티티를 확장하지 못하도록 함

XDocument doc = XDocument.Load(file); // <--- Exception 
// ... do some manipulation to doc 
doc.Save(file2); 

예외 : 참조를 선언되지 않은 엔티티 '엔티티 이름'에

직접하여 XDocument를 사용

, 그것은 예외가 엔티티를 할 unexpanded했다 말해 던지는로드 할 수 없습니다.

는 다음 나는 XDocument 생성자에 XmlTextReader를 전달하려고했으나 EntityHandling 속성은 "더 확장"이하지 않습니다 또한

XmlTextReader xmlReader = new XmlTextReader(file)); 
xmlReader.EntityHandling = EntityHandling.ExpandCharEntities; 
XDocument doc = XDocument.Load(xmlReader); 

, 나는 XmlReader.Create 기능을 살펴 보았다하지만, MSDN은 "Create 메서드로 만든 독자는 모든 엔터티를 확장합니다"라고 말합니다.

엔티티를 확장하지 않는 엔티티가있는 XDocument가 있거나 확장되지 않은 XmlReader를 만들려면 어떻게해야합니까?

답변

-3

decasteljau! 재미있는 일로 내 문제를 해결하는 방법을 검색하는 게시물을 찾았습니다. 그리고 문제는 엔티티가 전혀 해결되지 않은 경우와 관련이 있습니다. 내 질문에 대한 답변을 주셔서 감사합니다. 그리고 다음 질문에 대한 답변입니다 : 제발, XmlDocument를 사용하십시오.

XDocument document = XDocument.Load("test.xml"); XmlWriterSettings settings = new XmlWriterSettings(); settings.Indent = true; using (XmlWriter writer = XmlWriter.Create(Console.Out, settings)) { document.WriteTo(writer); } Console.WriteLine();

+2

이것은 의미가 없습니다. – harpo

3

은 나를 위해 일한 다음. 핵심은 리플렉션을 사용하여 내부 속성 값을 설정하는 것입니다. DisableUndeclaredEntityCheck.

XmlDocument document = new XmlDocument(); 
XmlReaderSettings readerSettings = new XmlReaderSettings() 
{ 
    DtdProcessing = DtdProcessing.Ignore, 
    IgnoreWhitespace = true, 
}; 
using (XmlReader reader = XmlReader.Create(inputPath, readerSettings)) 
{ 
    PropertyInfo propertyInfo = reader.GetType().GetProperty("DisableUndeclaredEntityCheck", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); 
    propertyInfo.SetValue(reader, true); 
    document.Load(reader); 
} 
+0

와우,이 작품은 나를 위해 매력적이었습니다. – Sung

관련 문제