C# 去除所有压痕

C# 去除所有压痕,c#,xml,indentation,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(inter

我有一个如下所示的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
添加缩进很容易,但我找不到任何东西可以删除缩进。

因为您想删除所有缩进,所以不需要XML解析器/编写器

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


注意:File.writeAllines在文件末尾追加一个换行符(因为每行后面都有一个换行符);如果您不想要缩进,您应该自己加入行。

因为您想要删除所有缩进,所以不需要XML解析器/编写器

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


注意:File.writeAllines在文件末尾追加一个换行符(因为每行后面都有一个换行符);如果您不想要,您应该自己加入这些行。

最简单的方法是忘记它是XML。读入文件,将其分成几行,删掉每行的空白,然后再次将文件写回。
File.ReadLines
String.TrimStart
方法可能对此很有用

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


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

最简单的方法是忘记它是XML。读入文件,将其分成几行,删掉每行的空白,然后再次将文件写回。
File.ReadLines
String.TrimStart
方法可能对此很有用

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


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

我同意前面的海报。下面就是一个例子

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

File.WriteAllLines(path, lines.Select(line => line.TrimStart()));
string path=“路径到文件”;
IEnumerable lines=File.ReadAllLines(路径);
File.writeAllines(路径,lines.Select(line=>line.TrimStart());

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

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

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

File.WriteAllLines(path, lines.Select(line => line.TrimStart()));
string path=“路径到文件”;
IEnumerable lines=File.ReadAllLines(路径);
File.writeAllines(路径,lines.Select(line=>line.TrimStart());

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

我认为这可能有助于:

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);
字符串标记=
@"
";
XmlReader noderReader=XmlReader.Create(新建StringReader(标记));
noderReader.MoveToContent();
XElement xRoot=XElement.Load(节点阅读器);
var result=xRoot.ToString(SaveOptions.DisableFormatting);

结果将包含未插入的字符串。

我建议这样做可能会有所帮助:

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);
字符串标记=
@"
";
XmlReader noderReader=XmlReader.Create(新建StringReader(标记));
noderReader.MoveToContent();
XElement xRoot=XElement.Load(节点阅读器);
var result=xRoot.ToString(SaveOptions.DisableFormatting);

结果将包含未插入的字符串。

为什么要这样做?试试看
XmlWriterSettings
是否有效?哦,说得清楚一点,您的XML存储为XML?i、 如果它是一个普通的字符串,你可能需要先解析它。Lasse,我正在将XML发送给翻译,所有人都在这些选项卡上遇到问题。减缓翻译过程。这就是为什么我不想让他们在没有缩进的情况下创建新的XML。为什么要这样做?试试看,
XmlWriterSettings
是否有效?哦,说得清楚一点,您的XML存储为XML?i、 如果它是一个普通的字符串,你可能需要先解析它。Lasse,我正在将XML发送给翻译,所有人都在这些选项卡上遇到问题。减缓翻译过程。这就是为什么我不想让他们创建没有缩进的新XML。谢谢你的解释。谢谢你的解释。