DataFlex
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
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