次のXMLを読みたいと思います。
<node></node>
そして、次のように縮小して書きます。
<node/>
明らかにこれは同じ意味を持っていますが、2番目のファイルはネットワークを介して送信するために小さくなっています。
.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()
て2番目の形式に変換できます。だからこのようなもの:
var emptyTags = doc.Descendants().Where(x => !x.Nodes().Any()).ToList();
foreach (XElement tag in emptyTags)
{
tag.RemoveNodes();
}
次に、通常の方法でドキュメントを保存します。そうすれば、必要な処理が実行されると思います...
XmlElementIsEmptyプロパティを見てください。
私はこれを自分でテストしませんでしたが、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);