我有一个如下所示的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
很容易添加缩进,但我找不到任何删除缩进的内容。
答案 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.ReadLines
和String.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);
结果将包含未缩进的字符串。