【发布时间】:2015-02-20 22:33:31
【问题描述】:
我阅读了一个已签名的 XML,格式如下:
<?xml version="1.0" encoding="UTF-8"?><principal><ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#"><ds:SignedInfo><ds:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/><ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/><ds:Reference URI="#1500-Fri Jan 30 19:11:38 BOT 2015"><ds:Transforms>s:Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/></ds:Transforms><ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><ds:DigestValue>YOzKDc7CB3QvedYMF2ZBB6omlsg=</ds:DigestValue></ds:Reference></ds:SignedInfo><ds:SignatureValue>DLZKHySIMKwFuB1wc8cR7w/UbLhYyZtul/ndFch1GCeiKrmohyNOGO82Hbcm+rFEWxK1yMx2sKtMKnuPTTCnIiZaYCLax5UJUe27AVqzpHZOc7+UKBmQoOOi3gYfAuyCZX5xBv0lrFNuigoNv6b0Z00Bu5Eu5e2zf01zceUqig40Y3yWUpEVRl+nbEUmVEBT+8fFwcigIQhqMbwFftGO8mcu55VKbGmMZS7cpwzfq+PsTrnDDHbZ9cme/8p3lWo8TGTEDTcQ2HZoSI5VAPR2/fGDGKtS5PEG0Vbb0WFdVZ+PKuOAhXqiP947xi6PP6Qv1bCbUqwsNLwTfuTjNR9lGg==</ds:SignatureValue><ds:KeyInfo><ds:KeyName>1500</ds:KeyName></ds:KeyInfo><ds:Object Id="1500-Fri Jan 30 19:11:38 BOT 2015"><SER><num>150049</num><cod>HJYafrtr3456ABDFG</cod><pais>BO</pais</SER></ds:Object></ds:Signature><Otro>Imagen</Otro></principal>
从 java 中读取:
DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fXmlFile);
NodeList signatures =
doc.getElementsByTagNameNS(Constants.SignatureSpecNS ,"ds:Signature");
System.out.println("the length "+ signatures.getLength());
返回“ signatures.getLength()” = 0,我试过了:
NodeList signatures = doc.getElementsByTagNameNS(Constants.SignatureSpecNS ,"ds");
NodeList signatures = doc.getElementsByTagNameNS(Constants.SignatureSpecNS ,"Signature");
因为可以读取标签<ds:Signature>。如何选择这个签名节点?
【问题讨论】:
-
您的 XML 格式错误。我将它粘贴到w3schools.com/xml/xml_validator.asp 的验证器中,并且存在语法错误。如果没有有效的 XML,其他任何事情都不会起作用。
-
BO - 这里缺少“>”。 -
已验证 xml 我得到这个正确组装的 elque 爬到示例中清楚地显示错误,但已更正但我仍然可以读取字段“ds:签名”
标签: java xml digital-signature