2

我想阅读以下 XML:

<node></node>

然后把它写出来,缩小,像这样:

<node/>

显然,这具有相同的含义,但是第二个文件更小,可以通过网络发送。

我试图找到一种在.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()which 将其转换为第二种形式。所以是这样的:

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

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

然后以正常方式保存文档,我认为它会做你想要的......

于 2009-11-11T16:06:28.380 回答
0

查看 XmlElement IsEmpty属性。

于 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 回答