c# - 在 C# 3.0 中缩小 XML 的最佳方法

标签 c# asp.net xml json linq-to-xml

编码平台:ASP.NET C#

我有一个这样的 XML。

<Items>
    <Map id="35">
        <Terrains>
            <Item id="1" row="0" column="0"/>
            <Item id="1" row="0" column="1"/>
            <Item id="1" row="0" column="2"/>
            <Item id="1" row="0" column="3"/>
            <Item id="1" row="0" column="4"/>
        </Terrains>
    </Map>
</Items>

我想把它缩小到

<Its>
    <Map id="30">
        <Te>
            <It id="1" r="0" c="0"/>
            <It id="1" r="0" c="1"/>
            <It id="1" r="0" c="2"/>
            <It id="1" r="0" c="3"/>
            <It id="1" r="0" c="4"/>
        </Te>
    </Map>
</Its>

然后我使用 James Newton-King's JSON Converter 将其转换为 JSON .
这个想法是最大限度地缩小 xml 数据,因为它包含数万行。

我的问题是

  1. 如上所述,缩小 xml 的最佳方法是什么?
  2. 现在它像 XML-MinifyXML-Convert to JSON 一样完成了。我可以分两步完成吗?(转换为 JSON 时 XML-Minify)
  3. James Newton-King 的 JSON 转换器对于这种简单的转换是否有点矫枉过正?

如果可能,请同时提供代码片段。

最佳答案

我怀疑 GZIP(通过 GZipStream,或简单地通过 IIS,注意你需要为 json mime 类型启用动态压缩)会更简单和更小,但如果你使用序列化,只需添加一些 [XmlElement( ...)]/[XmlAttribute(...)] 应该这样做。当然,如果您关心大小,我是否也可以推荐类似 protobuf-net 的东西,它提供极其密集的二进制输出。

如果您不使用序列化,那么这看起来非常适合某些“xslt”:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="@* | node()">
    <xsl:copy><xsl:apply-templates select="@* | node()"/></xsl:copy>
  </xsl:template>
  <xsl:template match="/Items">
    <Its><xsl:apply-templates/></Its>
  </xsl:template>
  <xsl:template match="/Items/Map/Terrains">
    <Te><xsl:apply-templates/></Te>
  </xsl:template>
  <xsl:template match="/Items/Map/Terrains/Item">
    <It id="{@id}" r="{@row}" c="{@column}"><xsl:apply-templates select="*"/></It>
  </xsl:template>
</xsl:stylesheet>

(使用 C#:)

XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load("Condense.xslt"); // cache and re-use this object; don't Load each time
xslt.Transform("Data.xml", "Smaller.xml");

 Console.WriteLine("{0} vs {1}",
    new FileInfo("Data.xml").Length,
    new FileInfo("Smaller.xml").Length);

关于c# - 在 C# 3.0 中缩小 XML 的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3744804/

相关文章:

c# - 在 WCF 服务库项目中使用自定义 ServiceHostFactory

JQuery UI 对话框和 Asp(Web 表单)调用事件处理程序

jquery - 使用 $.ajax 调用服务器端函数

c# - Entity Framework ,更改外键但导航属性不变

c# - 使用linq写入xml文件

php - 简单的xml如何在没有命名空间的情况下读取节点?

c# - 将数据存储在memcache中以供不同语言访问

c# - 在 Silverlight 中调整 LineHeight for Windows Phone 7 应用程序

c# - 使用来自文本文件的参数运行 exe

xml - 如何使用 Scala 获取与唯一节点相邻的节点?