Недавно я заменил 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)
Как сохранить многострочные строки без потери их из-за нормализации? (и без других неприятных побочных эффектов)
XmlTextReader не поддерживает схемы XSD (http://msdn.microsoft.com/en-us/library/tfz3cz6w%28v=vs.90%29.aspx). Большинство решений, которые я нахожу, используют XMLReader. –