XML缩减大小在.NET
我想在下面的XML阅读:XML缩减大小在.NET
<node></node>
然后写出来,精缩,像这样:
<node/>
显然,这具有相同的含义,但第二个文件在通过电线发送时较小。
我试图找到一种方法在.NET中做到这一点。我似乎无法找到将放弃不必要的关闭标签的选项或设置。
建议?
如果您使用LINQ to XML,则可以拨打XElement.RemoveNodes()
将其转换为第二种形式。因此,像这样:
var emptyTags = doc.Descendants().Where(x => !x.Nodes().Any()).ToList();
foreach (XElement tag in emptyTags)
{
tag.RemoveNodes();
}
然后将文档保存在正常的方式,我觉得它会做你想要什么......
您可以将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");
我没有这个测试自己,但你试图用的XmlWriter的XmlWriterSettings.OutputMethod物业实验?
下页为您提供了可以使用的选项:
http://msdn.microsoft.com/en-us/library/system.xml.xmloutputmethod.aspx
我不认为这会有帮助,除非“根据XML 1.0规则进行序列化”。意味着放弃空的结束标签。尽管如此,我会试试这个例子。 – nikmd23 2009-11-11 16:21:36
尝试使用选项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 = new XmlMinifier( new XmlMinificationSettings{ CollapseTagsWithoutContent = true }); MarkupMinificationResult result = xmlMinifier.Minify(xmlInput); Console.WriteLine("Minified content:{0}{0}{1}", Environment.NewLine, result.MinifiedContent);
+1。好问题。 – David 2009-11-11 16:14:45