Sample code for 30+ languages & platforms
DataFlex

XML Inclusive Canonicalization

See more XML Digital Signatures Examples

Demonstrates how to convert XML to the Inclusive XML Canonicalization form as specified in http://www.w3.org/TR/xml-c14n/

Chilkat DataFlex Downloads

DataFlex
Use ChilkatAx-win32.pkg

Procedure Test
    Boolean iSuccess
    Handle hoHttp
    Variant vSbXml
    Handle hoSbXml
    Handle hoCanon
    String sCanonVersion
    Boolean iWithComments
    String sUrl
    String sXmlInclCanon
    String sXmlExclCanon
    String sTemp1

    Move False To iSuccess

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

    // The XML digital signature verification class provides utility methods for
    // XML canonicalization.  This example demonstrates how to do inclusive XML canonicalization.

    Get Create (RefClass(cComChilkatHttp)) To hoHttp
    If (Not(IsComObjectCreated(hoHttp))) Begin
        Send CreateComObject of hoHttp
    End
    Get Create (RefClass(cComChilkatStringBuilder)) To hoSbXml
    If (Not(IsComObjectCreated(hoSbXml))) Begin
        Send CreateComObject of hoSbXml
    End
    Get Create (RefClass(cComChilkatXmlDSig)) To hoCanon
    If (Not(IsComObjectCreated(hoCanon))) Begin
        Send CreateComObject of hoCanon
    End

    // Use inclusive XML canonicalization.
    Move "C14N" To sCanonVersion
    Move False To iWithComments

    Move "https://www.chilkatsoft.com/exampleData/c14n/test7.xml" To sUrl
    Get pvComObject of hoSbXml to vSbXml
    Get ComQuickGetSb Of hoHttp sUrl vSbXml To iSuccess

    // This is the input XML:
    // The XML comment is referring to when exclusive XML canonicalization is applied.  With inclusive canonicalization, the namespace nodes
    // are kept, as we'll see below..

    // <doc>
    // <!-- A namespace node N is ignored if the nearest ancestor element of the node's parent element that is in the node-set has a namespace node in the node-set with the same local name and value as N. -->
    // 	<animal xmlns:aa="https://www.animal.com/">
    // 		<reptile xmlns:bb="https://www.reptile.com/">
    //   			<lizard xmlns="" type="african fat tailed" abc="xyz" xmlns:aa="https://www.animal.com/" />
    //   			<snake type="poisonous rattler" xmlns:bb="https://www.reptile.com/" >
    //   			</snake>
    //   		</reptile>
    //   	</animal>
    // </doc>

    Get ComGetAsString Of hoSbXml To sTemp1
    Get ComCanonicalizeXml Of hoCanon sTemp1 sCanonVersion iWithComments To sXmlInclCanon
    Showln sXmlInclCanon

    // The C14N (inclusive) canonicalization is:

    // <doc>
    // 
    // 	<animal xmlns:aa="https://www.animal.com/">
    // 		<reptile xmlns:bb="https://www.reptile.com/">
    //   			<lizard abc="xyz" type="african fat tailed"></lizard>
    //   			<snake type="poisonous rattler">
    //   			</snake>
    //   		</reptile>
    //   	</animal>
    // </doc>

    // To see the difference, let's do exclusive canonicalization..
    Move "EXCL_C14N" To sCanonVersion

    Get ComGetAsString Of hoSbXml To sTemp1
    Get ComCanonicalizeXml Of hoCanon sTemp1 sCanonVersion iWithComments To sXmlExclCanon
    Showln sXmlExclCanon

    // // The C14N (exclusive) canonicalization is:
    // 
    // <doc>
    // 
    // 	<animal>
    // 		<reptile>
    //   			<lizard abc="xyz" type="african fat tailed"></lizard>
    //   			<snake type="poisonous rattler">
    //   			</snake>
    //   		</reptile>
    //   	</animal>
    // </doc>


End_Procedure