我有一个简单的 XML,我使用 XPATH 查询对 XML 进行了签名,例如 //*[@isDigSignReqd = 'true']。现在,签名的 XML 包含如下属性
xmlns="http://www.xyze.org/xservice" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
连接到每个节点。XML 签名验证发生得很好。但是,我可以删除这些属性吗?我对 XML 签名和所有这些都很陌生。请帮忙。
这就是 XML 的样子(部分)
<?xml version="1.0" encoding="UTF-8"?><XService xmlns="http://www.xyzbe.org/xservice" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.xyzbe.org/xservice ACPDTLRequest.xsd">
<request xmlns="http://www.xyzbe.org/xservice" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<header xmlns="http://www.xyzbe.org/xservice" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<BANK_ID isDigSignReqd="true" xmlns="http://www.xyzbe.org/xservice" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">DBS</BANK_ID>
<LANGUAGE_ID isDigSignReqd="true" xmlns="http://www.xyzbe.org/xservice" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">001</LANGUAGE_ID>
<CHANNEL_ID isDigSignReqd="true" xmlns="http://www.xyzbe.org/xservice" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">I</CHANNEL_ID>
<LOGIN_FLAG isDigSignReqd="true" xmlns="http://www.xyzbe.org/xservice" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">2</LOGIN_FLAG>
变换是这样创建的。
final XPathFilter2ParameterSpec xp2Spec = new XPathFilter2ParameterSpec(
Collections.singletonList(new XPathType("//*[@isDigSignReqd='true']", XPathType.Filter.INTERSECT)));
List<Transform> transforms = new ArrayList<Transform>() {
private static final long serialVersionUID = 1L;
{
add(sigFactory.newTransform(Transform.ENVELOPED, (TransformParameterSpec) null));
add(sigFactory.newTransform(Transform.XPATH2, xp2Spec ));
} };