Sample code for 30+ languages & platforms
PHP

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 PHP Downloads

Chilkat2 PHP
<?php

use Chilkat2\Http;
use Chilkat2\StringBuilder;
use Chilkat2\XmlDSig;

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

$http = new Http();
$sbXml = new StringBuilder();
$canon = new XmlDSig();

// Use exclusive XML canonicalization.
$canonVersion = 'EXCL_C14N';
$withComments = false;
// The optional inclusive namespaces prefix list if using exclusive canonicalization.
$prefixList = '';

$url = 'https://www.chilkatsoft.com/exampleData/canonicalizeFragmentTest.xml';
$http->QuickGetSb($url, $sbXml);

// 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".
$xmlCanonFrag = $canon->CanonicalizeFragment($sbXml->GetAsString(), 'object', $canonVersion, $prefixList, $withComments);
echo $xmlCanonFrag, "\n";

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