先解压再解析XML。C#用GZipStream解压字节流并转字符串,Java用GZIPInputStream或InflaterInputStream读取压缩数据,结合StreamReader或BufferedReader还原为明文XML后,交由XDocument或DocumentBuilder解析;需注意压缩前是否Base64编码及字节序、魔数识别(如1F8B标识GZip)。

在处理XML数据时,有时会遇到经过压缩的XML字符串(如使用GZip或Deflate压缩)。要解析这类内容,必须先解压再进行XML解析。以下是常见的解压XML字符串的方法,适用于C#、Java等主流语言。
1. C# 中解压 GZip 压缩的 XML 字符串
如果XML字符串是通过GZip压缩的,可以使用 red">GZipStream 进行解压:
- 将压缩的字节流读入内存
- 使用 GZipStream 解压成原始字节
- 转换为字符串后用 XDocument 或 XmlDocument 解析
示例代码:
using System.IO; using System.IO.Compression; using System.Text; using System.Xml.Linq;public static string DecompressGZipXml(byte[] compressedData) { using (var memoryStream = new MemoryStream(compressedData)) using (var gzipStream = new GZipStream(memoryStream, CompressionMode.Decompress)) using (var streamReader = new StreamReader(gzipStream, Encoding.UTF8)) { return streamReader.ReadToEnd(); } }
// 使用 string xmlContent = DecompressGZipXml(compressedBytes); XDocument doc = XDocument.Parse(xmlContent);
2. Java 中解压 Deflate 或 GZip 的 XML 字符串
Java 提供了 java.util.zip 包来处理压缩数据。根据压缩方式选择 InflaterInputStream(Deflate)或 GZIPInputStream。
示例:解压 GZip 压缩的XML
本文档主要讲述的是Android数据格式解析对象JSON用法;JSON可以将Java对象转成json格式的字符串,可以将json字符串转换成Java。比XML更轻量级,Json使用起来比较轻便和简单。JSON数据格式,在Android中被广泛运用于客户端和服务器通信,在网络数据传输与解析时非常方便。希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看
import java.io.*; import java.util.zip.GZIPInputStream; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document;public static String decompressGZipXml(byte[] compressedData) throws IOException { ByteArrayInputStream bais = new ByteArrayInputStream(compressedData); GZIPInputStream gis = new GZIPInputStream(bais); BufferedReader reader = new BufferedReader(new InputStreamReader(gis, "UTF-8")); StringBuilder outStr = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { outStr.append(line); } return outStr.toString(); }
// 解析XML DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.parse(new InputSource(new StringReader(xmlString)));
3. 判断是否压缩及常见问题
实际应用中,需确认XML字符串是否真的被压缩,以及使用的压缩算法:
- 查看数据来源文档或API说明
- 检查字节数组前几个字节(魔数):GZip通常以 1F 8B 开头
- 确保编码一致(一般为UTF-8)
- 压缩可能是Base64编码后再传输,需先Base64解码
Base64 + GZip 示例(C#):
byte[] compressedBytes = Convert.FromBase64String(base64String); string xml = DecompressGZipXml(compressedBytes);
基本上就这些。关键是先还原原始XML字符串,再交给标准解析器处理。









