2010-08-17 15 views
7

मैं इकाइयों का विस्तार किए बिना एक XML दस्तावेज़ पढ़ने की कोशिश कर रहा हूं, इसमें कुछ जोड़-विमर्श करता हूं, और इसे अनपेक्षित इकाइयों के साथ फिर से सहेजता हूं क्योंकि वे प्रारंभ में थे।XmlTextReader को इकाइयों का विस्तार करने से रोकें

जब XDocument सीधे का उपयोग कर, यह लोड करने के लिए विफल रहता है, फेंक एक अपवाद मुझे बताओ यह संस्थाओं अविस्तारित गया है: अघोषित इकाई 'EntityName' के लिए संदर्भ:

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

अपवाद।

तब मैं XDocument निर्माता को XmlTextReader पारित करने के लिए कोशिश की, लेकिन EntityHandling संपत्ति नहीं है "कोई विस्तार":

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

इसके अलावा, मैं XmlReader.Create समारोह पर ध्यान दिया है, लेकिन एमएसडीएन का कहना है: "निर्माण विधि द्वारा बनाए गए पाठक सभी इकाइयों का विस्तार करते हैं"।

मैं एक एक्सएमएल रीडर कैसे बना सकता हूं जो इकाइयों का विस्तार नहीं करता है, या जिन संस्थाओं के साथ एक्सडोक्यूमेंट नहीं है, उनके साथ विस्तार किया जा सकता है?

उत्तर

-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

संबंधित मुद्दे