xmlreader换行符\n而不是\ r \n

use*_*144 11 .net newline xmlreader

当我使用XmlReader.ReadOuterXml()时,元素由\n而不是\ r \n分隔.所以,例如,如果我有XmlDocument representatino

<A>
<B>
</B>
</A>
Run Code Online (Sandbox Code Playgroud)

我明白了

<A>\n<B>\n</B>\n</A>
Run Code Online (Sandbox Code Playgroud)

是否有指定换行符的选项?XmlWriterSettings有它,但XmlReader似乎没有这个.

这是我读取xml的代码.请注意,默认情况下,XmlWriterSettings具有NewLineHandling = Replace

XmlDocument xmlDocument = <Generate some XmlDocument>
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;

// Use a memory stream because it accepts UTF8 characters.  If we use a 
// string builder the XML will be UTF16.
using (MemoryStream memStream = new MemoryStream())
{
    using (XmlWriter xmlWriter = XmlWriter.Create(memStream, settings))
    {
        xmlDocument.Save(xmlWriter);
    }

    //Set the pointer back to the beginning of the stream to be read
    memStream.Position = 0;
    using (XmlReader reader = XmlReader.Create(memStream))
    {
        reader.Read();
        string header = reader.Value;
        reader.MoveToContent();
        return "<?xml " + header + " ?>" + Environment.NewLine + reader.ReadOuterXml();
    }
}
Run Code Online (Sandbox Code Playgroud)

Jas*_*aty 13

XmlReader将自动标准化\r\n\\n.虽然这在Windows上看起来很不寻常,但实际上需要XML规范(http://www.w3.org/TR/2008/REC-xml-20081126/#sec-line-ends).

你可以这样做String.Replace:

string s = reader.ReadOuterXml().Replace("\n", "\r\n");
Run Code Online (Sandbox Code Playgroud)


CMa*_*den 5

我必须使用 LINQ to XML 将数据库数据写入 xml 文件并从 xml 文件中读回。记录中的某些字段本身就是用 \r 字符完成的 xml 字符串。这些必须保持完整。我花了几天时间试图找到可行的东西,但微软似乎有意将 \r 转换为 \n。

以下解决方案对我有用:

要将加载的 XDocument 写入 XML 文件,保持 \r 不变,其中 xDoc 是 XDocument,filePath 是字符串:

XmlWriterSettings xmlWriterSettings = new XmlWriterSettings 
    { NewLineHandling = NewLineHandling.None, Indent = true };
using (XmlWriter xmlWriter = XmlWriter.Create(filePath, xmlWriterSettings))
{
    xDoc.Save(xmlWriter);
    xmlWriter.Flush();
}
Run Code Online (Sandbox Code Playgroud)

要将 XML 文件读入 XElement 并保持 \r 不变:

using (XmlTextReader xmlTextReader = new XmlTextReader(filePath) 
   { WhitespaceHandling = WhitespaceHandling.Significant })
{
     xmlTextReader.MoveToContent();
     xDatabaseElement = XElement.Load(xmlTextReader);
}
Run Code Online (Sandbox Code Playgroud)