1 /* 2 * Summary: Provide Canonical XML and Exclusive XML Canonicalization 3 * Description: the c14n modules provides a 4 * 5 * "Canonical XML" implementation 6 * http://www.w3.org/TR/xml-c14n 7 * 8 * and an 9 * 10 * "Exclusive XML Canonicalization" implementation 11 * http://www.w3.org/TR/xml-exc-c14n 12 13 * Copy: See Copyright for the status of this software. 14 * 15 * Author: Aleksey Sanin <aleksey@aleksey.com> 16 */ 17 #ifndef __XML_C14N_H__ 18 #define __XML_C14N_H__ 19 20 #include <libxml/xmlversion.h> 21 22 #ifdef LIBXML_C14N_ENABLED 23 24 #include <libxml/tree.h> 25 #include <libxml/xpath.h> 26 27 #ifdef __cplusplus 28 extern "C" { 29 #endif /* __cplusplus */ 30 31 /* 32 * XML Canonicalization 33 * http://www.w3.org/TR/xml-c14n 34 * 35 * Exclusive XML Canonicalization 36 * http://www.w3.org/TR/xml-exc-c14n 37 * 38 * Canonical form of an XML document could be created if and only if 39 * a) default attributes (if any) are added to all nodes 40 * b) all character and parsed entity references are resolved 41 * In order to achieve this in libxml2 the document MUST be loaded with 42 * following global settings: 43 * 44 * xmlLoadExtDtdDefaultValue = XML_DETECT_IDS | XML_COMPLETE_ATTRS; 45 * xmlSubstituteEntitiesDefault(1); 46 * 47 * or corresponding parser context setting: 48 * xmlParserCtxtPtr ctxt; 49 * 50 * ... 51 * ctxt->loadsubset = XML_DETECT_IDS | XML_COMPLETE_ATTRS; 52 * ctxt->replaceEntities = 1; 53 * ... 54 */ 55 56 /* 57 * xmlC14NMode: 58 * 59 * Predefined values for C14N modes 60 * 61 */ 62 typedef enum { 63 XML_C14N_1_0 = 0, /* Original C14N 1.0 spec */ 64 XML_C14N_EXCLUSIVE_1_0 = 1, /* Exclusive C14N 1.0 spec */ 65 XML_C14N_1_1 = 2 /* C14N 1.1 spec */ 66 } xmlC14NMode; 67 68 XMLPUBFUN int 69 xmlC14NDocSaveTo (xmlDocPtr doc, 70 xmlNodeSetPtr nodes, 71 int mode, /* a xmlC14NMode */ 72 xmlChar **inclusive_ns_prefixes, 73 int with_comments, 74 xmlOutputBufferPtr buf); 75 76 XMLPUBFUN int 77 xmlC14NDocDumpMemory (xmlDocPtr doc, 78 xmlNodeSetPtr nodes, 79 int mode, /* a xmlC14NMode */ 80 xmlChar **inclusive_ns_prefixes, 81 int with_comments, 82 xmlChar **doc_txt_ptr); 83 84 XMLPUBFUN int 85 xmlC14NDocSave (xmlDocPtr doc, 86 xmlNodeSetPtr nodes, 87 int mode, /* a xmlC14NMode */ 88 xmlChar **inclusive_ns_prefixes, 89 int with_comments, 90 const char* filename, 91 int compression); 92 93 94 /** 95 * This is the core C14N function 96 */ 97 /** 98 * xmlC14NIsVisibleCallback: 99 * @user_data: user data 100 * @node: the current node 101 * @parent: the parent node 102 * 103 * Signature for a C14N callback on visible nodes 104 * 105 * Returns 1 if the node should be included 106 */ 107 typedef int (*xmlC14NIsVisibleCallback) (void* user_data, 108 xmlNodePtr node, 109 xmlNodePtr parent); 110 111 XMLPUBFUN int 112 xmlC14NExecute (xmlDocPtr doc, 113 xmlC14NIsVisibleCallback is_visible_callback, 114 void* user_data, 115 int mode, /* a xmlC14NMode */ 116 xmlChar **inclusive_ns_prefixes, 117 int with_comments, 118 xmlOutputBufferPtr buf); 119 120 #ifdef __cplusplus 121 } 122 #endif /* __cplusplus */ 123 124 #endif /* LIBXML_C14N_ENABLED */ 125 #endif /* __XML_C14N_H__ */ 126 127