C# 去除所有压痕
我有一个如下所示的XML: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
<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。谢谢你的解释。谢谢你的解释。