[xslt] omit XML declaration in XSLT result

I'm using libxslt 1.1.24 (with dependency libxml2 2.7.3) from C++ to
convert some XML to JSON. The xsl:output element attributes
omit-xml-declaration and method are correctly set to "yes" and "text"
respectively. My JSON result string produced by the following code is
prefaced by an XML declaration, which is unwanted. Code

#include "json_utils.h"
#include <libxml++/libxml++.h>
#include <libxslt/xsltInternals.h>
#include <libxslt/transform.h>
#include <glibmm/i18n.h>

#include <sstream> //For stringstream
#include <string>
#include <iostream>
#include <fstream>


  Glib::ustring  result;

  //Use libxslt to transform the XML:
  xmlDocPtr style = xmlReadMemory(stylestring.c_str(),
stylestring.length(),0,0, 0);
  if (style)
    //Parse the stylesheet:
    xsltStylesheetPtr cur = xsltParseStylesheetDoc(style);
      //Use the parsed stylesheet on the XML:
      xmlDocPtr pDocOutput = xsltApplyStylesheet(cur,
const_cast<xmlDoc*>(xml_document.cobj()), 0);

      //Get the output text:
      xmlChar* buffer = 0;
      int length = 0;
      xmlIndentTreeOutput = 1; //Format the output with extra white
space. TODO: Is there a better way than this global variable?
      xmlDocDumpFormatMemoryEnc(pDocOutput, &buffer, &length, 0, 0);

      // GOTCHA TODO This is outputting the XML declaration despite
      // the xsl:output directive in the stylesheet. Funny thing is, the
      // same stylesheet does not do that with xsltproc. Need to trace
      // with gdb with debuginfo RPM's?
        // Create a Glib::ustring copy of the buffer

        // Here we force the use of Glib::ustring::ustring(
InputIterator begin, InputIterator end )
        // instead of Glib::ustring::ustring( const char*, size_type )
because it
        // expects the length of the string in characters, not in bytes.
        result = Glib::ustring( reinterpret_cast<const char
*>(buffer), reinterpret_cast<const char *>(buffer + length) );

        // Deletes the original buffer


  return result;

My result string is beginning with '<?xml version="1.0"
encoding="UTF-8"?>\n', not what I want. Same stylesheet (available at
http://www.xml.lt/static/files/xml2json.xsl) and xsltproc or
libxslt_tutorial.c from the libxslt website works fine.

I must be doing something wrong. Guidance?
Al Pacifico
Seattle, WA

[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]