【问题标题】:Adding a carriage return after XML ending closing tag?在 XML 结束结束标记后添加回车?
【发布时间】:2014-03-27 19:24:36
【问题描述】:

我正在处理来自供应商的一些类似 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...

【问题讨论】:

  • 你需要支持CDATA吗?
  • 不,它不是格式良好的 XML。它只是一堆元素,没有 CDATA。

标签: c#


【解决方案1】:

您可以使用正则表达式:

string result = Regex.Replace(str, "</([^>]*)>", "</$1>" + Environment.NewLine);

【讨论】:

  • 这让我接近了我所需要的。我将进一步修改以获得准确的结果,但这正是我需要指出我正确的方向。谢谢!
【解决方案2】:

如果文本是有效的XML,请尝试将其读取到XmlDocument,然后使用以下XmlWriterSettings 将其写回:

using (XmlWriter writer = XmlWriter.Create(filename, new XmlWriterSettings
    { Indent = true, IndentChars = String.Empty }))
{
    xmlDocument.Save(writer);
}

【讨论】:

    猜你喜欢
    • 2018-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多