我需要签署XML文档。但是,要签名的XML元素没有id。有没有办法按标签名称添加签名?
类似的东西:
`<father>
<child>element to sign, without "id" </child>
<I need the signature here></I need the signature here>
</father>`
我明白我的问题在于这句话:
Reference ref = fac.newReference("", fac.newDigestMethod(
DigestMethod.SHA1, null), Collections.singletonList(fac
.newTransform(Transform.ENVELOPED,
(TransformParameterSpec) null)), null, null);
我试过这种方式:
Reference ref = fac.newReference("#child", fac.newDigestMethod(
DigestMethod.SHA1, null), Collections.singletonList(fac
.newTransform(Transform.ENVELOPED,
(TransformParameterSpec) null)), null, null);
但是这会引发异常,因为它找不到元素,第一个选项有效,但签名被添加到xml文件的末尾:
`<father>
<child>element to sign, without "id" </child>
</father>
<Signature></Signature>`
任何建议?
提前致谢!!!
答案 0 :(得分:0)
你有没有像孩子一样尝试过的东西?下面的代码不会解决您的问题,因为它将返回一个空ID,但它可以作为灵感。例如,尝试在newReference函数中传递el作为引用。
elements = doc.getElementsByTagName(tag);
Element el = (Element) elements.item(0);
String id = el.getAttribute("Id");
//Reference ref = fac.newReference("".concat(id), fac.newDigestMethod(DigestMethod.SHA1, null), transformList, null, null);
Reference ref = fac.newReference("#" + id, fac.newDigestMethod(DigestMethod.SHA1, null), transformList, null, null);