PHP 8.3.31
Preview: io1.c Size: 3.67 KB
//opt/alt/libxml2/usr/share/doc/alt-libxml2-devel/examples/io1.c

/**
 * section: InputOutput
 * synopsis: Example of custom Input/Output
 * purpose: Demonstrate the use of xmlRegisterInputCallbacks
 *          to build a custom I/O layer, this is used in an
 *          XInclude method context to show how dynamic document can
 *          be built in a clean way.
 * usage: io1
 * test: io1 > io1.tmp && diff io1.tmp $(srcdir)/io1.res
 * author: Daniel Veillard
 * copy: see Copyright for the status of this software.
 */

#include <stdio.h>
#include <string.h>
#include <libxml/parser.h>
#include <libxml/tree.h>
#include <libxml/xinclude.h>
#include <libxml/xmlIO.h>

#ifdef LIBXML_XINCLUDE_ENABLED
static const char *result = "<list><people>a</people><people>b</people></list>";
static const char *cur = NULL;
static int rlen;

/**
 * sqlMatch:
 * @URI: an URI to test
 *
 * Check for an sql: query
 *
 * Returns 1 if yes and 0 if another Input module should be used
 */
static int
sqlMatch(const char * URI) {
    if ((URI != NULL) && (!strncmp(URI, "sql:", 4)))
        return(1);
    return(0);
}

/**
 * sqlOpen:
 * @URI: an URI to test
 *
 * Return a pointer to the sql: query handler, in this example simply
 * the current pointer...
 *
 * Returns an Input context or NULL in case or error
 */
static void *
sqlOpen(const char * URI) {
    if ((URI == NULL) || (strncmp(URI, "sql:", 4)))
        return(NULL);
    cur = result;
    rlen = strlen(result);
    return((void *) cur);
}

/**
 * sqlClose:
 * @context: the read context
 *
 * Close the sql: query handler
 *
 * Returns 0 or -1 in case of error
 */
static int
sqlClose(void * context) {
    if (context == NULL) return(-1);
    cur = NULL;
    rlen = 0;
    return(0);
}

/**
 * sqlRead:
 * @context: the read context
 * @buffer: where to store data
 * @len: number of bytes to read
 *
 * Implement an sql: query read.
 *
 * Returns the number of bytes read or -1 in case of error
 */
static int
sqlRead(void * context, char * buffer, int len) {
   const char *ptr = (const char *) context;

   if ((context == NULL) || (buffer == NULL) || (len < 0))
       return(-1);

   if (len > rlen) len = rlen;
   memcpy(buffer, ptr, len);
   rlen -= len;
   return(len);
}

const char *include = "<?xml version='1.0'?>\n\
<document xmlns:xi=\"http://www.w3.org/2003/XInclude\">\n\
  <p>List of people:</p>\n\
  <xi:include href=\"sql:select_name_from_people\"/>\n\
</document>\n";

int main(void) {
    xmlDocPtr doc;

    /*
     * this initialize the library and check potential ABI mismatches
     * between the version it was compiled for and the actual shared
     * library used.
     */
    LIBXML_TEST_VERSION

    /*
     * register the new I/O handlers
     */
    if (xmlRegisterInputCallbacks(sqlMatch, sqlOpen, sqlRead, sqlClose) < 0) {
        fprintf(stderr, "failed to register SQL handler\n");
	exit(1);
    }
    /*
     * parse include into a document
     */
    doc = xmlReadMemory(include, strlen(include), "include.xml", NULL, 0);
    if (doc == NULL) {
        fprintf(stderr, "failed to parse the including file\n");
	exit(1);
    }

    /*
     * apply the XInclude process, this should trigger the I/O just
     * registered.
     */
    if (xmlXIncludeProcess(doc) <= 0) {
        fprintf(stderr, "XInclude processing failed\n");
	exit(1);
    }

#ifdef LIBXML_OUTPUT_ENABLED
    /*
     * save the output for checking to stdout
     */
    xmlDocDump(stdout, doc);
#endif

    /*
     * Free the document
     */
    xmlFreeDoc(doc);

    /*
     * Cleanup function for the XML library.
     */
    xmlCleanupParser();
    /*
     * this is to debug memory for regression tests
     */
    xmlMemoryDump();
    return(0);
}
#else
int main(void) {
    fprintf(stderr, "XInclude support not compiled in\n");
    return(0);
}
#endif

Directory Contents

Dirs: 1 × Files: 56

Name Size Perms Modified Actions
.libs DIR
- drwxr-xr-x 2025-05-01 13:44:55
Edit Download
1 B lrw-r--r-- 2025-03-14 09:52:56
Edit Download
31.66 KB lrw-r--r-- 2022-08-29 13:16:31
Edit Download
4.51 KB lrw-r--r-- 2022-08-25 11:03:49
Edit Download
38.71 KB lrw-r--r-- 2022-08-29 13:16:31
Edit Download
8.95 KB lrw-r--r-- 2022-08-25 11:03:49
Edit Download
7.71 KB lrwxr-xr-x 2025-03-14 09:52:52
Edit Download
3.67 KB lrw-r--r-- 2022-05-02 12:10:21
Edit Download
30.64 KB lrw-r--r-- 2025-03-14 09:52:52
Edit Download
7.71 KB lrwxr-xr-x 2025-03-14 09:52:52
Edit Download
1.17 KB lrw-r--r-- 2022-06-28 17:30:39
Edit Download
22.04 KB lrw-r--r-- 2025-03-14 09:52:52
Edit Download
30.11 KB lrw-r--r-- 2025-03-14 09:51:08
Edit Download
3.11 KB lrw-r--r-- 2022-08-17 11:22:20
Edit Download
31.11 KB lrw-r--r-- 2022-08-29 13:20:52
Edit Download
7.74 KB lrwxr-xr-x 2025-03-14 09:52:52
Edit Download
1.27 KB lrw-r--r-- 2020-08-06 09:09:15
Edit Download
22.02 KB lrw-r--r-- 2025-03-14 09:52:52
Edit Download
7.74 KB lrwxr-xr-x 2025-03-14 09:52:53
Edit Download
1.92 KB lrw-r--r-- 2020-08-06 09:09:15
Edit Download
43.21 KB lrw-r--r-- 2025-03-14 09:52:52
Edit Download
7.74 KB lrwxr-xr-x 2025-03-14 09:52:53
Edit Download
1.47 KB lrw-r--r-- 2020-08-06 09:09:15
Edit Download
22.02 KB lrw-r--r-- 2025-03-14 09:52:53
Edit Download
7.74 KB lrwxr-xr-x 2025-03-14 09:52:54
Edit Download
3.46 KB lrw-r--r-- 2022-05-02 12:10:21
Edit Download
47.55 KB lrw-r--r-- 2025-03-14 09:52:54
Edit Download
7.75 KB lrwxr-xr-x 2025-03-14 09:52:55
Edit Download
2.47 KB lrw-r--r-- 2022-05-02 12:10:21
Edit Download
24.03 KB lrw-r--r-- 2025-03-14 09:52:54
Edit Download
7.75 KB lrwxr-xr-x 2025-03-14 09:52:55
Edit Download
3.06 KB lrw-r--r-- 2022-05-02 12:10:21
Edit Download
25.97 KB lrw-r--r-- 2025-03-14 09:52:55
Edit Download
7.75 KB lrwxr-xr-x 2025-03-14 09:52:55
Edit Download
2.88 KB lrw-r--r-- 2022-05-02 12:10:21
Edit Download
26.90 KB lrw-r--r-- 2025-03-14 09:52:55
Edit Download
7.75 KB lrwxr-xr-x 2025-03-14 09:52:55
Edit Download
3.06 KB lrw-r--r-- 2022-05-02 12:10:21
Edit Download
29.63 KB lrw-r--r-- 2025-03-14 09:52:55
Edit Download
7 B lrw-r--r-- 2020-06-26 12:29:16
Edit Download
227 B lrw-r--r-- 2020-06-26 12:29:16
Edit Download
833 B lrw-r--r-- 2020-06-26 12:29:16
Edit Download
7.79 KB lrwxr-xr-x 2025-03-14 09:52:55
Edit Download
37.60 KB lrw-r--r-- 2022-05-02 12:10:21
Edit Download
105.34 KB lrw-r--r-- 2025-03-14 09:52:55
Edit Download
7.73 KB lrwxr-xr-x 2025-03-14 09:52:56
Edit Download
2.19 KB lrw-r--r-- 2022-05-02 12:10:21
Edit Download
24.31 KB lrw-r--r-- 2025-03-14 09:52:56
Edit Download
7.73 KB lrwxr-xr-x 2025-03-14 09:52:56
Edit Download
3.37 KB lrw-r--r-- 2022-06-28 17:30:39
Edit Download
29.45 KB lrw-r--r-- 2025-03-14 09:52:56
Edit Download
7.74 KB lrwxr-xr-x 2025-03-14 09:52:56
Edit Download
6.47 KB lrw-r--r-- 2022-05-02 12:10:21
Edit Download
58.59 KB lrw-r--r-- 2025-03-14 09:52:56
Edit Download
7.74 KB lrwxr-xr-x 2025-03-14 09:52:56
Edit Download
5.21 KB lrw-r--r-- 2022-05-02 12:10:21
Edit Download
40.76 KB lrw-r--r-- 2025-03-14 09:52:56
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).