删除所有缩进

时间:2014-02-26 08:00:41

标签: c# xml indentation

我有一个如下所示的XML:

<DataRow>
    <Name><![CDATA[DateAdd]]></Name>
    <Description><![CDATA[Adds or subtracts some interval of time from a date or time.]]></Description>
    <Syntax><![CDATA[DateAdd(interval, number, date)]]></Syntax>
    <Notes><![CDATA[Interval may be:
        yyyy=year
        q=quarter
        m=month
        y=day of year
        d=day
        w=weekday
        ww=week of year
        h=hour
        n=minute
        s=second]]>
    </Notes>
</DataRow>

我想删除CDATA内的所有缩进。使用XmlTextWriter很容易添加缩进,但我找不到任何删除缩进的内容。

4 个答案:

答案 0 :(得分:1)

由于您要删除所有缩进,因此不需要XML解析器/编写器。

您可以使用File.ReadAllLines将文本作为单独的行加载,然后使用string.TrimStart处理它们中的每一行。然后使用File.WriteAllLines将它们保存回磁盘。

N.B。:File.WriteAllLines在文件的末尾附加一个换行符(因为它跟在换行符的每一行之后);如果你不想要一个,你应该自己加入这些行。

答案 1 :(得分:1)

我同意之前的海报。这方面的一个例子是以下

string path = "path_to_file";
IEnumerable<string> lines = File.ReadAllLines(path);

File.WriteAllLines(path, lines.Select(line => line.TrimStart()));

这将删除文件中所有行的所有前导空格。

答案 2 :(得分:0)

最简单的方法是忘记它是XML。读入文件,将其拆分为行,修剪每行的空白并再次将文件写回。 File.ReadLinesString.TrimStart方法可能对此有用。

这避免了XML解析器保留布局的任何问题(虽然您可以保存XDocument告诉它禁用格式化),但也会删除CDATA部分的缩进,XML解析器将不会触及该缩进,因为CDATA被明确定义为只是一个字符串,XML解析器无法以任何方式解释它。

因此,这似乎是一个有点奇怪的要求,并不真正与XML的处理方式保持一致,因此我建议不要将其视为XML。

答案 3 :(得分:0)

我建议这可能有所帮助:

string markup =
@"<Root>
    <Child>
        <GrandChild/>
    </Child>
</Root>";

XmlReader nodeReader = XmlReader.Create(new StringReader(markup));
nodeReader.MoveToContent();

XElement xRoot = XElement.Load(nodeReader);
var result = xRoot.ToString(SaveOptions.DisableFormatting);

结果将包含未缩进的字符串。