使用XmlReader处理窗口换行符

本文关键字:换行符 窗口 处理 XmlReader 使用 | 更新日期: 2023-09-27 18:00:54

最近,我用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.Entize,它解决了我的问题,但这使XML文档在例如wordpad或任何其他文本编辑器中不再可读。(http://msdn.microsoft.com/en-us/library/system.xml.xmlwritersettings.newlinehandling.aspx)

如何在不因规范化而丢失多行字符串的情况下保存这些字符串(没有其他讨厌的副作用(

使用XmlReader处理窗口换行符

从创建Xml读取器(emphasis mine(:

如果必须根据请求展开实体(通过Create方法创建的读取器展开所有实体(,或者如果不希望文本内容规范化,请使用XmlTextReader类。