Sample code for 30+ languages & platforms
Visual FoxPro

Canonicalize XML Fragment

See more XML Digital Signatures Examples

Demonstrates how to canonicalize a fragment of an XML document. The fragment is identified by the element having an Id attribute equal to a specified value. (The Id attribute can have any namespace, and the attribute name is case-insensitive (thus "ID", "Id", "id", etc. match).

Chilkat Visual FoxPro Downloads

Visual FoxPro
LOCAL lnSuccess
LOCAL loHttp
LOCAL loSbXml
LOCAL loCanon
LOCAL lcCanonVersion
LOCAL lnWithComments
LOCAL lcPrefixList
LOCAL lcUrl
LOCAL lcXmlCanonFrag

lnSuccess = 0

* This example requires the Chilkat API to have been previously unlocked.
* See Global Unlock Sample for sample code.

loHttp = CreateObject('Chilkat.Http')
loSbXml = CreateObject('Chilkat.StringBuilder')
loCanon = CreateObject('Chilkat.XmlDSig')

* Use exclusive XML canonicalization.
lcCanonVersion = "EXCL_C14N"
lnWithComments = 0
* The optional inclusive namespaces prefix list if using exclusive canonicalization.
lcPrefixList = ""

lcUrl = "https://www.chilkatsoft.com/exampleData/canonicalizeFragmentTest.xml"
lnSuccess = loHttp.QuickGetSb(lcUrl,loSbXml)

* This is the input XML:

* <?xml version="1.0" encoding="UTF-8"?>
* <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
* <SignedInfo>
*   <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
*   <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
*   <Reference URI="#object">
*     <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
*     <DigestValue>OPnpF/ZNLDxJ/I+1F3iHhlmSwgo=</DigestValue>
*   </Reference>
* </SignedInfo>
* <SignatureValue>nihUFQg4mDhLgecvhIcKb9Gz8VRTOlw+adiZOBBXgK4JodEe5aFfCqm8WcRIT8GL
* LXSk8PsUP4//SsKqUBQkpotcAqQAhtz2v9kCWdoUDnAOtFZkd/CnsZ1sge0ndha4
* 0wWDV+nOWyJxkYgicvB8POYtSmldLLepPGMz+J7/Uws=</SignatureValue>
* <KeyInfo>
*   <KeyValue>
*     <RSAKeyValue>
*       <Modulus>4IlzOY3Y9fXoh3Y5f06wBbtTg94Pt6vcfcd1KQ0FLm0S36aGJtTSb6pYKfyX7PqC
*       UQ8wgL6xUJ5GRPEsu9gyz8ZobwfZsGCsvu40CWoT9fcFBZPfXro1Vtlh/xl/yYHm
*       +Gzqh0Bw76xtLHSfLfpVOrmZdwKmSFKMTvNXOFd0V18=</Modulus>
*       <Exponent>AQAB</Exponent>
*     </RSAKeyValue>
*   </KeyValue>
* </KeyInfo>
* <Object Id="object">some text
*   with spaces and CR-LF.</Object>
* </Signature>

* Canonicalize and return the fragment of XML starting at the element where the Id attribute equals "object".
lcXmlCanonFrag = loCanon.CanonicalizeFragment(loSbXml.GetAsString(),"object",lcCanonVersion,lcPrefixList,lnWithComments)
? lcXmlCanonFrag

* The output is:
* 
* <Object xmlns="http://www.w3.org/2000/09/xmldsig#" Id="object">some text
*   with spaces and CR-LF.</Object>
* 

RELEASE loHttp
RELEASE loSbXml
RELEASE loCanon