単純な XML があり、//*[@isDigSignReqd = 'true'] のような XPATH クエリを使用して XML に署名しました。現在、署名された 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 ));
} };