BASIC Developer & Support Resources => Translators => C BASIC => Topic started by: John on December 01, 2013, 10:44:50 am

Title: C BASIC - SCEW (Simple C Expat Wrapper)
Post by: John on December 01, 2013, 10:44:50 am
The aim of SCEW ( is to provide an easy interface around the XML Expat parser, as well as a simple interface for creating new XML documents. It provides functions to load and access XML elements without the need to create Expat event handling routines every time you want to load a new XML document.

SCEW features:

Code: [Select]
// C BASIC - SCEW (Simple C Expat Wrapper)
// gcc scew_write.c -lscew -o scew_write

#include <stdio.h>
#include <scew/scew.h>
#include "cbasic.h"

enum {MAX_OUTPUT_BUFFER_ = 2000};

  DIM AS scew_tree PTR tree = NULL;
  DIM AS scew_element PTR root = NULL;
  DIM AS scew_element PTR element = NULL;
  DIM AS scew_element PTR sub_element = NULL;
  DIM AS scew_element PTR sub_sub_element = NULL;
  DIM AS scew_attribute PTR attribute = NULL;
  DIM AS scew_printer PTR printer = NULL;
  DIM AS scew_writer PTR writer = NULL;
  DIM AS XML_Char PTR buffer = NULL;
  IF (argc < 2) THEN
    scew_printf(_XT("Usage: scew_write new_file.xml\n"));
  tree = scew_tree_create ();
  root = scew_tree_set_root (tree, _XT("test"));
  element = scew_element_add (root, _XT("element"));
  scew_element_set_contents (element, _XT("element contents"));
  element = scew_element_add (root, _XT("element"));
  scew_element_add_attribute_pair (element, _XT("attribute"), _XT("value"));
  element = scew_element_add (root, _XT("element"));
  scew_element_add_attribute_pair (element, _XT("attribute1"), _XT("value1"));
  attribute = scew_attribute_create (_XT("attribute2"), _XT("value2"));
  scew_element_add_attribute (element, attribute);
  element = scew_element_add (root, _XT("element"));
  sub_element = scew_element_add (element, _XT("subelement"));
  scew_element_add_attribute_pair (sub_element, _XT("attribute"), _XT("value"));
  sub_element = scew_element_add (element, _XT("subelement"));
  scew_element_add_attribute_pair (sub_element, _XT("attribute1"), _XT("value1"));
  scew_element_add_attribute_pair (sub_element, _XT("attribute2"), _XT("value2"));
  sub_sub_element = scew_element_add (sub_element, _XT("subsubelement"));
  scew_element_add_attribute_pair (sub_sub_element, _XT("attribute1"), _XT("value1"));
  scew_element_add_attribute_pair (sub_sub_element, _XT("attribute2"), _XT("value2"));
  scew_element_add_attribute_pair (sub_sub_element, _XT("attribute3"), _XT("value3"));
  scew_element_add_attribute_pair (sub_sub_element, _XT("attribute2"), _XT("new_value2"));
  scew_element_set_contents (sub_sub_element, _XT("With accents: à é è í ó ú"));
  writer = scew_writer_file_create (argv[1]);
  IF (writer EQ NULL) THEN
    PRINT ("Unable to create %s\n", argv[1]);
  printer = scew_printer_create (writer);
  IF (printer EQ NULL) THEN
    PRINT ("Unable to create printer\n");
  (void) scew_printer_print_tree (printer, tree);
  scew_writer_free (writer);
  buffer = (XML_Char PTR) malloc (MAX_OUTPUT_BUFFER_);
  writer = scew_writer_buffer_create (buffer, MAX_OUTPUT_BUFFER_);
  IF (writer EQ NULL) THEN
    PRINT ("Unable to create writer buffer\n");
  scew_printer_set_writer (printer, writer);
  (void) scew_printer_print_tree (printer, tree);
  scew_printf (_XT("%s"), buffer);
  free (buffer);
  scew_writer_free (writer);
  scew_printer_free (printer);
  scew_tree_free (tree);

jrs@laptop:~/C_BASIC/xlate$ gcc scew_write.c -lscew -o scew_write
jrs@laptop:~/C_BASIC/xlate$ ./scew_write
Usage: scew_write new_file.xml
jrs@laptop:~/C_BASIC/xlate$ ./scew_write scew_out.xml
<?xml version="1.0" encoding="UTF-8"?>

   <element>element contents</element>
   <element attribute="value"/>
   <element attribute1="value1" attribute2="value2"/>
      <subelement attribute="value"/>
      <subelement attribute1="value1" attribute2="value2">
         <subsubelement attribute1="value1" attribute2="new_value2" attribute3="value3">With accents: à é è í ó ú</subsubelement>