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)
我必须使用 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)
归档时间: |
|
查看次数: |
7440 次 |
最近记录: |