2013-02-25 4 views
1

Недавно я заменил XmlValidatingReader на XmlReader и использовал XmlReaderSettings для проверки xml с помощью xsd.Обработка окон newline с помощью XmlReader

CustomData cd = null; 
using (Stream xsdStream = new FileStream(m_DXsdFile, FileMode.Open, FileAccess.Read, FileShare.Read)) 
{ 
    XmlTextReader sr = new XmlTextReader(xsdStream); 
    using (Stream xmlStream = new FileStream(m_DXmlFile, FileMode.Open, FileAccess.Read, FileShare.Read)) 
    { 
    XmlReaderSettings settings = new XmlReaderSettings(); 
    settings.ValidationType = ValidationType.Schema; 
    settings.Schemas.Add(null, sr); 
    XmlReader reader = XmlReader.Create(xmlStream, settings); 

    try 
    { 
     XmlSerializer xmlSerializer = CreateDefaultXmlSerializer(m_Type); 
     cd = (CustomData)xmlSerializer.Deserialize(reader); 
    } 

    ... 
} 

XML: 
<Column Name="Content"> 
    <Data xsi:type="xsd:string"> * info info info 
info info info 
info info info</Data> 
    <Data xsi:type="xsd:string">/* This is a test */</Data> 
</Column> 
<Column Name="ErrorNr"> 
    <Data xsi:type="xsd:int">2</Data> 
    <Data xsi:type="xsd:int">2</Data> 
    <Data xsi:type="xsd:int">2</Data> 
</Column> 

CreateDefaultXmlSerializer() реализован как предложено здесь: https://stackoverflow.com/a/9416860/2107510

Однако XmlReader нормализует все строки и новообращенных \ г \ п к \ п. Это не оценено многострочными текстовыми полями, которые теперь отображают одну строку вместо нескольких строк.

Я пробовал использовать XmlWriterSettings.NewLineHandling.Entitize, и он исправляет мою проблему, но это делает XML-документ более недоступным для чтения, например. текстовый редактор или любой другой текстовый редактор. (http://msdn.microsoft.com/en-us/library/system.xml.xmlwritersettings.newlinehandling.aspx)

Как сохранить многострочные строки без потери их из-за нормализации? (и без других неприятных побочных эффектов)

ответ

0

От Creating Xml Readers (курсив мой):

Если необходимо расширить объекты по запросу (читатели, созданные с помощью метода Create разлагать все объекты), или если вы сделать не хотите, чтобы ваше текстовое содержимое нормализовалось, используйте класс XmlTextReader.

+0

XmlTextReader не поддерживает схемы XSD (http://msdn.microsoft.com/en-us/library/tfz3cz6w%28v=vs.90%29.aspx). Большинство решений, которые я нахожу, используют XMLReader. –

Смежные вопросы