我想在下面的XML閱讀:XML縮減大小在.NET
<node></node>
然後寫出來,精縮,像這樣:
<node/>
顯然,這具有相同的含義,但第二個文件在通過電線發送時較小。
我試圖找到一種方法在.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