如何从XmlDocument中删除空格

9

我有一个XML文档,想要删除其中的空格和换行符。我该如何使用C#获取修改后的XML文档。

3个回答

21

将preserveWhitespace标志设置为false:

XmlDocument doc = new XmlDocument();
doc.PreserveWhitespace = false;
doc.Load("foo.xml");
// doc.InnerXml contains no spaces or returns

1
AareP 是正确的,如果直接在 doc.LoadXml(...) 后使用它是不起作用的。 - Ted
请注意,如果文档包含任何 xml:space="preserve" 属性,则它将无法工作(当然是出于设计目的),因此在加载之前必须删除这些属性。 - Simon Mourier
1
另一个答案使用XDocument(来自System.Xml.Linq)可以在这里找到: https://dev59.com/MG025IYBdhLWcg3wRDu8#6111760 - Luuk

7

去除标签之间的空格:

# Regex regex = new Regex(@">\s*<");  
# string cleanedXml = regex.Replace(dirtyXml, "><");

这里有源代码和其他有用信息,点击查看


14
它是否也会从 CDATA 部分中删除空格?换句话说,这些地方应该保持原样? - Lukasz 'Severiaan' Grela

1

我只需使用更完整的正则表达式就解决了这个问题:

var regex = new Regex(@"[\s]+(?![^><]*(?:>|<\/))");
var cleanedXml = regex.Replace(xml, "");

这个正则表达式将删除所有封闭标签之间的空格。

输入示例:

<root>
   <result success="1"/>
   <userID>12345</userID>
   <classID>  56543  </classID>
</root>

输入的输出结果:

<root><result success="1"/><userID>12345</userID><classID>  56543  </classID>
</root>

这个正则表达式的更完整解释可以在这篇文章中找到:https://dev59.com/8IPba4cB1Zd3GeqPqEUB#25771445


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接