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/.
嗨,我想缩小我的 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/.