You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Dart中使用XSL转换XML?求等效Java功能实现方案

Dart 实现 XML XSL转换 + SHA-256哈希Base64编码

核心流程对应

你的Java代码核心做了三件事:

  1. 用XSLT转换输入XML为二进制流
  2. 对转换结果计算SHA-256哈希
  3. 将哈希值转为Base64编码返回

以下是Dart的等价实现,替代已废弃的xsltProcessor:


第一步:添加依赖

在pubspec.yaml中引入所需包:

dependencies:
  xml: ^6.5.0
  xslt: ^0.2.0
  crypto: ^3.0.3
  convert: ^3.1.1

第二步:完整实现代码

import 'dart:convert';
import 'dart:typed_data';
import 'package:crypto/crypto.dart';
import 'package:xml/xml.dart';
import 'package:xslt/xslt.dart';

// XSLT转换XML为二进制数据
Uint8List _transformXml(String xmlContent, String xslContent) {
  final xmlDoc = XmlDocument.parse(xmlContent);
  final xslDoc = XmlDocument.parse(xslContent);
  
  final transformer = XsltTransformer(xslDoc);
  final transformedXml = transformer.transform(xmlDoc);
  
  // 转为UTF-8字节,和Java中ByteArrayOutputStream输出一致
  return utf8.encode(transformedXml.toXmlString()) as Uint8List;
}

// 生成SHA-256哈希的Base64编码
String _sha256Base64(Uint8List data) {
  final hashBytes = sha256.convert(data).bytes;
  return base64.encode(hashBytes);
}

// 整合流程
String processXml(String xmlDocument, String xslContent) {
  try {
    final transformedData = _transformXml(xmlDocument, xslContent);
    return _sha256Base64(transformedData);
  } catch (e) {
    print('处理异常: $e');
    rethrow;
  }
}

关键说明

  • XSL资源加载:Java中getTransformer(mContext)是从上下文加载XSL,Dart中需要先读取XSL内容(比如通过rootBundle.loadString加载assets资源,或者网络请求获取),再传入processXml函数
  • 编码一致性:确保XML转换后的字节流用UTF-8编码,和Java默认行为对齐
  • Base64兼容性:Dart的base64.encode和Java标准Base64编码器行为完全一致,无额外换行或格式差异

内容的提问来源于stack exchange,提问作者Scribes Dev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 21:15:42