XMLReader的换行符的\ n代替\ r \ñ换行符、XMLReader

2023-09-04 08:41:41 作者:疯到全世界都崩溃

当我使用XmlReader.ReadOuterXml(),元素由\分隔的n代替\ r \ñ。 所以,举例来说,如果我有XmlDocument的重新presentatino

 < A>
< B>
< / B>
< / A>
 

我收到

 < A> \ N'LT; B> \ N'LT; / B> \ N'LT; / A>
 
怎样换word中错词转换

有一个选项来指定换行符? XmlWriterSettings有,但XmlReader的似乎并不具备这一点。

下面是我的code读取XML。需要注意的是XmlWriterSettings在默认情况下已经NewLineHandling =替换

  XmlDocument的XMLDOCUMENT =<产生一些XmlDocument的>
XmlWriterSettings设置=新XmlWriterSettings();
settings.Indent = TRUE;

//使用一个内存流,因为它接受UTF8字符。如果我们使用
//字符串生成的XML将是UTF16。
使用(MemoryStream的memStream =新的MemoryStream())
{
    使用(的XmlWriter的XmlWriter = XmlWriter.Create(memStream,设置))
    {
        xmlDocument.Save(XmlWriter的);
    }

    //设置指针回流的开始被读
    memStream.Position = 0;
    使用(XmlReader的读者= XmlReader.Create(memStream))
    {
        reader.Read();
        字符串标题= reader.Value;
        reader.MoveToContent();
        回归< XML+标题+>? + Environment.NewLine + reader.ReadOuterXml();
    }
}
 

解决方案

的XmlReader 将自动标准化 \ r \ñ\ 。尽管这似乎是不寻常在Windows上,它实际上是要求由XML规范(http://www.w3.org/TR/2008/REC-xml-20081126/#sec-line-ends).

您可以做一个与string.replace

 字符串s = reader.ReadOuterXml()更换(\ N,\ r \ N)。
 

When I use XmlReader.ReadOuterXml(), elements are separated by \n instead of \r\n. So, for example, if I have XmlDocument representatino of

<A>
<B>
</B>
</A>

I get

<A>\n<B>\n</B>\n</A>

Is there an option to specify newline character? XmlWriterSettings has it but XmlReader doesn't seem to have this.

Here is my code to read xml. Note that XmlWriterSettings by default has 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();
    }
}

解决方案

XmlReader will automatically normalize \r\n\ to \n. Although this seems unusual on Windows, it is actually required by the XML Specification (http://www.w3.org/TR/2008/REC-xml-20081126/#sec-line-ends).

You can do a String.Replace:

string s = reader.ReadOuterXml().Replace("\n", "\r\n");