先解压再解析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压缩的,可以使用 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
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();}
// 解析XMLDocumentBuilderFactory 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字符串,再交给标准解析器处理。
以上就是XML中如何解压XML字符串_XML解压XML字符串的操作方法的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1431896.html
微信扫一扫
支付宝扫一扫