最近,我用XmlReader替换了XmlValidatingReader,并使用XmlReaderSettings用xsd验证xml。
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。现在显示一行而不是多行的多行文本框不能理解这一点。
我尝试使用XmlWriterSettings.NewLineHandling.Entitize并修复了我的问题,但这使得XML文档不再可读wordpad或任何其他文本编辑器。 (http://msdn.microsoft.com/en-us/library/system.xml.xmlwritersettings.newlinehandling.aspx)
如何保存多行字符串而不会因规范化而丢失它们?(并且没有其他令人讨厌的副作用)
答案 0 :(得分:1)
来自Creating Xml Readers(强调我的):
如果您必须根据请求展开实体(由Create方法创建的阅读器展开所有实体),或者不希望文本内容标准化,请使用
XmlTextReader
类。< / p>