我想阅读以下 XML:
<node></node>
然后把它写出来,缩小,像这样:
<node/>
显然,这具有相同的含义,但是第二个文件更小,可以通过网络发送。
我试图找到一种在.NET 中执行此操作的方法。我似乎找不到会删除不必要的结束标签的选项或设置。
建议?
您可以将 XML 复制到新结构中。
public static XElement Minify(XElement element) {
return new XElement(element.Name, element.Attributes(),
element.Nodes().Select(node => {
if (node is XElement)
return Minify((XElement)node);
return node;
})
);
}
这是另一个解决方案,但没有 LINQ http://social.msdn.microsoft.com/Forums/en-US/xmlandnetfx/thread/e1e881db-6547-42c4-b379-df5885f779be
XmlDocument doc = new XmlDocument();
doc.PreserveWhitespace = true;
doc.Load("input.xml");
foreach (XmlElement el in
doc.SelectNodes("descendant::*[not(*) and not(normalize-space())]"))
{
el.IsEmpty = true;
}
doc.Save("output.xml");
如果您使用 LINQ to XML,您可以调用XElement.RemoveNodes()
which 将其转换为第二种形式。所以是这样的:
var emptyTags = doc.Descendants().Where(x => !x.Nodes().Any()).ToList();
foreach (XElement tag in emptyTags)
{
tag.RemoveNodes();
}
然后以正常方式保存文档,我认为它会做你想要的......
查看 XmlElement IsEmpty属性。
我自己没有对此进行测试,但是您是否尝试过使用 XmlWriter 的XmlWriterSettings.OutputMethod属性进行试验?
以下页面为您提供了可以使用的选项:
http://msdn.microsoft.com/en-us/library/system.xml.xmloutputmethod.aspx
尝试使用“折叠没有内容的标签”选项的WebMarkupMin XML Minifier :
const string xmlInput = "<row RoleId=\"4\" RoleName=\"Administrator\"></row>\n" + "<row RoleId=\"5\" RoleName=\"Contributor\"></row>\n" + "<row RoleId=\"6\" RoleName=\"Editor\"></row>" ; var xmlMinifier = 新的 XmlMinifier( 新的 XmlMinificationSettings{ CollapseTagsWithoutContent = true }); MarkupMinificationResult 结果 = xmlMinifier.Minify(xmlInput); Console.WriteLine("缩小的内容:{0}{0}{1}", Environment.NewLine, result.MinifiedContent);