在XML结束结束标记后添加回车符?

时间:2014-03-27 19:24:36

标签: c#

我正在处理来自供应商的类似XML的文本。该文看起来像这样:

Vendor Supplied Document

请注意,每个元素的结束标记后都有一个回车符/换行符。 我们有一个程序可以创建一个类似XML的新文档,然后发送给供应商。它基本上只是一个文本文件。但问题是,我们生成的文档在每个结束标记后都不包含回车符/换行符。

我们无法修改程序,但我想我们可以编写一个小程序来读取文本文档,在每个结束标记的末尾添加一个CR / LF,然后将其写回,基本上只需将文本修改为供应商的文档。

我做这件事的第一次尝试并不顺利。这是我使用的代码:

// Add CR/LF to file.
var myFile = File.ReadAllText(_filePath);  
myFile = myFile.Replace(">", ">" + Environment.NewLine);
File.WriteAllText(_filePath, myFile);

但是,我忘了在>字符上进行替换,也会对起始元素标记执行此操作。所以,我现在在开始和结束标签之后有一个CR / LF:

enter image description here

所以,基本上,我想知道如何在结束结束标记后添加CR / LF?

我还应该提一下,我尝试这样做的文件是一长串类似xml的文本。所以,它看起来像这样:

<name>nextOver.gif</name><relativelink>images/nextOver.gif</relativelink><resourceflags>0</resourceflags>...

我只想读取文本文件,在每个closking标签后添加一个CR / LF,然后写出修改后的文件。

编辑:我刚才有一个想法。也许我可以使用RegEx来挑选每个结束标记,根据标记是否包含/字符,然后以某种方式在...之后添加CR / LF ...

2 个答案:

答案 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);
}