gpt4 book ai didi

java - 如何规范化 Stax XML 对象

转载 作者:行者123 更新时间:2023-12-01 05:56:34 25 4
gpt4 key购买 nike

我想规范化一个 Stax 对象,该程序使用 DOM 来实现这一点,但 dom 无法管理大型 XML 文档(例如 1GB),因此 STAX 是解决方案。

我拥有的代码是:

File file=new File("big-1gb.xml");

org.apache.xml.security.Init.init();
DocumentBuilderFactory dfactory = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = dfactory.newDocumentBuilder();

Document doc = documentBuilder.parse(file);

Canonicalizer c14n = Canonicalizer.getInstance("http://www.w3.org/TR/2001/REC-xml-c14n-20010315");

outputBytes = c14n.canonicalizeSubtree(doc.getElementsByTagName("SomeTag").item(0));

使用 Stax 执行以下代码的想法...

谢谢:)

最佳答案

我使用 XOM 库解决了这个问题,这是等效的代码。

ByteArrayOutputStream bytestream = new ByteArrayOutputStream();
ObjectOutputStream outputstream = new ObjectOutputStream(bytestream);

nu.xom.Builder builder = new nu.xom.Builder(false, new nu.xom.samples.MinimalNodeFactory()); //The false parameter is for avoid a ValidationException that trows XOM

try {
nu.xom.canonical.Canonicalizer outputter = new nu.xom.canonical.Canonicalizer(outputstream);
nu.xom.Document input = builder.build(file);
outputter.write(input);
}
catch (Exception ex) {
System.err.println(ex);
ex.printStackTrace();
}

outputstream.close();

MessageDigest sha1 = MessageDigest.getInstance("SHA1");
sha1.reset();
sha1.update(java.nio.ByteBuffer.wrap(bytestream.toByteArray()));
salidasha1=sha1.digest();
String tagDigestValue=new String(Base64.encodeBase64(salidasha1));

这段代码可以管理200Mb的文件,并且需要7分钟来进行规范化,如果您有疑问,请参阅XOM文档,它很清楚并且有很多示例。

感谢大家的评论:)

关于java - 如何规范化 Stax XML 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2773715/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com