XML : 缩小我的 xml

XML : minify my xml

嗨,我想缩小我的 xml,

说它有 100 kbs,所以我想尽量缩小它,但不想压缩它。我试着把它做成一条线,但它并没有太大的区别,但有 10%(大约) 如果我可以使用 xslt 来完成它,那就太好了,但我不想使用 java 或 c# 或任何其他编程语言。 我希望我说清楚了,但如果仍有疑问,请在下面发表评论。

谢谢

P.S。我正在使用 Eclipse IDE 编写所有代码

我不确定我是否理解 "I want to minify it but I don't want to compress it"。缩小和压缩有什么区别?如果不同之处在于您希望压缩形式为 XML 以保留原始文件的所有结构和内容,那么您就不走运了:在保留文档的同时,您可以删除的冗余非常少逻辑上等价且格式正确 XML.

您确定没有语义缩减的余地,即删除收件人不感兴趣的文档部分吗?

有多种方法可以减小 XML 文件的大小。

  • 例如,正确选择编码。在 UTF-32 中,文件中的每个字符都将占用 4 个字节,这已经很多了。最好采用 UTF-8 - 那么所有特殊字符,如:<>";'= 将占用一个字节。但在某些情况下会出现很多字符,即在UTF-8中会占用3-6个字节。而 UTF-16 中的相同字符将占用 2 个字节。所以你应该选择最适合你的数据的编码。

  • 尽可能使用属性而不是元素。比较结果字符串的长度:

    <person><firstname>John</firstname><lastname>Smit</lastname></person>
    <person firstname="John" lastname="Smit"/>
    
  • 使用短命名空间前缀,而不是长前缀。对于最常用的数据,默认使用命名空间,没有前缀。参见:

    <longprefix:person xmlns:longprefix="www.example.com">
        <longprefix:firstname>John</longprefix:firstname>
        <longprefix:lastname>Smit</longprefix:lastname>
    </longprefix:person>
    
    <p:person xmlns:p="www.example.com">
        <p:firstname>John</p:firstname>
        <p:lastname>Smit</p:lastname>
    </p:person>
    

    请注意命名空间是相同的,因此对于解析器它们是相同的。

  • 有时 XML 模式或 DTD 与数据一起存储在 XML 文件中。如果你有很多相似的文件,将模式存储在每个文件中是额外的开销。您可以在单独的文件中创建架构。

  • 您可以将数据存储在 xml 个没有默认值的文件中。这些值可以在读取时自动添加。例如

    <person pet="dog">
        <name>John</name>
    </person>
    
    <person>
        <name>Mary</name>
    </person>
    

    你看到玛丽的宠物了吗?但它在那里!默认是猫。

    <xs:element maxOccurs="unbounded" name="person">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="name" type="xs:string" />
            </xs:sequence>
            <xs:attribute name="pet" type="xs:string" default="cat" />
        </xs:complexType>
    </xs:element>
    
  • 您应该从 XML 文件中删除所有评论。可以单独存储文件格式的说明。

还可以考虑使用许多很棒的 XML 缩小工具和/或在线库之一。他们将在您这边无需任何额外的手动操作,将您的 XML 的结构减少到最低限度!请注意,XML minifiying 工具只能做这么多,因为它们 永远不会 试图从语义上改变文档的结构。然而,根据使用的工具,它们将减少标签和属性之间的空白,删除注释,甚至摆脱未使用的名称空间并缩小使用的名称空间。如果您使用的是 NodeJS,我可能会推荐我的 minify-xml package, which will do all the above. You can also access an online version of my library at https://minify-x.ml/.