最近、XmlValidatingReader を XmlReader に置き換え、XmlReaderSettings を使用して xml を xsd で検証しました。
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 はすべての改行を正規化し、\r\n を \n に変換します。これは、複数行ではなく 1 行を表示する複数行のテキスト ボックスでは認識されません。
XmlWriterSettings.NewLineHandling.Entitize を使用してみましたが、問題は解決しましたが、ワードパッドやその他のテキスト エディターなどで XML ドキュメントを読み取れなくなりました。( http://msdn.microsoft.com/en-us/library/system.xml.xmlwritersettings.newlinehandling.aspx )
正規化のために複数行の文字列を失うことなく保持するにはどうすればよいですか? (そして他の厄介な副作用なしで)