我正在处理来自供应商的类似XML的文本。该文看起来像这样:
请注意,每个元素的结束标记后都有一个回车符/换行符。 我们有一个程序可以创建一个类似XML的新文档,然后发送给供应商。它基本上只是一个文本文件。但问题是,我们生成的文档在每个结束标记后都不包含回车符/换行符。
我们无法修改程序,但我想我们可以编写一个小程序来读取文本文档,在每个结束标记的末尾添加一个CR / LF,然后将其写回,基本上只需将文本修改为供应商的文档。
我做这件事的第一次尝试并不顺利。这是我使用的代码:
// Add CR/LF to file.
var myFile = File.ReadAllText(_filePath);
myFile = myFile.Replace(">", ">" + Environment.NewLine);
File.WriteAllText(_filePath, myFile);
但是,我忘了在>
字符上进行替换,也会对起始元素标记执行此操作。所以,我现在在开始和结束标签之后有一个CR / LF:
所以,基本上,我想知道如何在结束结束标记后添加CR / LF?
我还应该提一下,我尝试这样做的文件是一长串类似xml的文本。所以,它看起来像这样:
<name>nextOver.gif</name><relativelink>images/nextOver.gif</relativelink><resourceflags>0</resourceflags>...
我只想读取文本文件,在每个closking标签后添加一个CR / LF,然后写出修改后的文件。
编辑:我刚才有一个想法。也许我可以使用RegEx来挑选每个结束标记,根据标记是否包含/
字符,然后以某种方式在...之后添加CR / LF ...
答案 0 :(得分:4)
您可以使用正则表达式:
string result = Regex.Replace(str, "</([^>]*)>", "</$1>" + Environment.NewLine);
答案 1 :(得分:2)
如果文字有效XML
,请尝试将其读取到XmlDocument
,然后使用以下XmlWriterSettings
将其写回:
using (XmlWriter writer = XmlWriter.Create(filename, new XmlWriterSettings
{ Indent = true, IndentChars = String.Empty }))
{
xmlDocument.Save(writer);
}