2

次のXMLを読みたいと思います。

<node></node>

そして、次のように縮小して書きます。

<node/>

明らかにこれは同じ意味を持っていますが、2番目のファイルはネットワークを介して送信するために小さくなっています。

.NETでこれを行う方法を見つけようとしています。不要な終了タグを削除するオプションや設定が見つからないようです。

提案?

4

5 に答える 5

1

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");
于 2009-11-11T16:13:53.763 に答える
0

LINQ to XMLを使用する場合は、呼び出しXElement.RemoveNodes()て2番目の形式に変換できます。だからこのようなもの:

var emptyTags = doc.Descendants().Where(x => !x.Nodes().Any()).ToList();

foreach (XElement tag in emptyTags)
{
    tag.RemoveNodes();
}

次に、通常の方法でドキュメントを保存します。そうすれば、必要な処理が実行されると思います...

于 2009-11-11T16:06:28.380 に答える
0

XmlElementIsEmptyプロパティを見てください

于 2009-11-11T16:11:07.637 に答える
0

私はこれを自分でテストしませんでしたが、XmlWriter のXmlWriterSettings.OutputMethodプロパティ を試してみましたか?

次のページには、使用できるオプションが示されています。

http://msdn.microsoft.com/en-us/library/system.xml.xmloutputmethod.aspx

于 2009-11-11T16:14:26.537 に答える
0

「コンテンツなしでタグを折りたたむ」オプションを使用して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);
于 2013-04-16T11:18:13.853 に答える