我想签署一个如下所示的XML字符串:
<Foo>
<ds:Signature Id="REC">
<ds:SignedInfo>
<ds:CanonicalizationMethod />
<ds:SignatureMethod />
<ds:Reference>
<ds:Reference URI="">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/TR/1999/REC-xpath-19991116">
<ds:XPath>not(ancestor-or-self::ds:Signature)</ds:XPath>
</ds:Transform>
</ds:Transforms>
<ds:DigestMethod>
<ds:DigestValue>
</ds:Reference>
<ds:Reference /> etc.
</ds:SignedInfo>
<ds:SignatureValue />
<ds:KeyInfo />
<ds:Object />
</ds:Signature>
<ds:Signature Id="PAC">
<ds:SignedInfo>
<ds:CanonicalizationMethod />
<ds:SignatureMethod />
<ds:Reference>
<ds:Transforms>
<ds:DigestMethod>
<ds:DigestValue>[DIGEST VALUE OF ALL THE PREVIOUS XML]</ds:DigestValue>
</ds:Reference>
<ds:Reference /> etc.
</ds:SignedInfo>
<ds:SignatureValue />
<ds:KeyInfo />
<ds:Object />
</ds:Signature>
</Foo>
这样它就会添加另一个签名(带有相应的digestvalue和signaturevalue),它应该是这样的:
_TRANSFORM = "not(ancestor-or-self::ds:Signature)";
XPathContainer xpathC = new XPathContainer(doc2);
xpathC.setXPath(_TRANSFORM);
Transforms transforms = new Transforms(doc2);
transforms.addTransform("http://www.w3.org/TR/1999/REC-xpath-19991116",xpathC.getElement());
signature.addDocument("", transforms);
进行转换的java代码是:
[self.view endEditing:YES];
我应该使用什么XPATH表达式来消化整个XML,而不仅仅是&#34; Foo&#34; (就像我之前做的那样)?
到目前为止,我曾尝试过:
......没有运气。
感谢您的时间。
答案 0 :(得分:0)
方法不是(祖先或自我:: ds:签名[@Id =&#39; PAC&#39;])对于XPATH来说是正确的,以获取除当前签名之外的所有XML(在本例中为一个具有属性&#39; Id&#39;值为&#39; PAC&#39;)我发现我误输了XML并且它有不同的值。