2013-02-25 29 views
1

最近,我用XmlReader替换了XmlValidatingReader并使用XmlReaderSettings来验证xml是否带有xsd。使用XmlReader处理windows换行

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文档在例如写字板或任何其他文字编辑器。 (http://msdn.microsoft.com/en-us/library/system.xml.xmlwritersettings.newlinehandling.aspx

如何保留多行字符串而不会因归一化而丢失?(并且没有其他讨厌的副作用)

回答

0

Creating Xml Readers(重点煤矿):

如果必须扩大请求(由创建方法创建读者展开所有实体)的实体,或者如果你做不希望您的文字内容标准化为,请使用XmlTextReader类。

+0

XmlTextReader不支持XSD模式(http://msdn.microsoft.com/zh-cn/library/tfz3cz6w%28v=vs.90%29.aspx)。我发现大多数解决方案都使用XMLReader。 – 2013-02-26 11:26:02