xsltInternals

Name

xsltInternals -- 

Synopsis



#define     XSLT_MAX_SORT
#define     XSLT_PAT_NO_PRIORITY
struct      xsltTemplate;
typedef     xsltTemplatePtr;
struct      xsltDecimalFormat;
typedef     xsltDecimalFormatPtr;
struct      xsltDocument;
typedef     xsltDocumentPtr;
struct      xsltTransformContext;
typedef     xsltTransformContextPtr;
struct      xsltStylePreComp;
typedef     xsltStylePreCompPtr;
void        (*xsltTransformFunction)        (xsltTransformContextPtr ctxt,
                                             xmlNodePtr node,
                                             xmlNodePtr inst,
                                             xsltStylePreCompPtr comp);
enum        xsltStyleType;
struct      xsltStackElem;
typedef     xsltStackElemPtr;
struct      xsltStylesheet;
typedef     xsltStylesheetPtr;
enum        xsltOutputType;
enum        xsltTransformState;
#define     CHECK_STOPPED
#define     CHECK_STOPPEDE
#define     CHECK_STOPPED0
xsltStylesheetPtr xsltNewStylesheet         (void);
xsltStylesheetPtr xsltParseStylesheetFile   (const xmlChar *filename);
void        xsltFreeStylesheet              (xsltStylesheetPtr sheet);
int         xsltIsBlank                     (xmlChar *str);
void        xsltFreeStackElemList           (xsltStackElemPtr elem);
xsltDecimalFormatPtr xsltDecimalFormatGetByName
                                            (xsltStylesheetPtr sheet,
                                             xmlChar *name);
xsltStylesheetPtr xsltParseStylesheetProcess
                                            (xsltStylesheetPtr ret,
                                             xmlDocPtr doc);
void        xsltParseStylesheetOutput       (xsltStylesheetPtr style,
                                             xmlNodePtr cur);
xsltStylesheetPtr xsltParseStylesheetDoc    (xmlDocPtr doc);
void        xsltNumberFormat                (xsltTransformContextPtr ctxt,
                                             xsltNumberDataPtr data,
                                             xmlNodePtr node);
xmlXPathError xsltFormatNumberConversion    (xsltDecimalFormatPtr self,
                                             xmlChar *format,
                                             double number,
                                             xmlChar **result);

Description

Details

XSLT_MAX_SORT

#define XSLT_MAX_SORT 5

Max number of specified xsl:sort on an element


XSLT_PAT_NO_PRIORITY

#define XSLT_PAT_NO_PRIORITY -12345789

specific value for pattern without priority expressed


struct xsltTemplate

struct xsltTemplate {
    struct _xsltTemplate *next;/* chained list sorted by priority */
    struct _xsltStylesheet *style;/* the containing stylesheet */
    xmlChar *match;	/* the matching string */
    float priority;	/* as given from the stylesheet, not computed */
    xmlChar *name;	/* the local part of the name QName */
    xmlChar *nameURI;	/* the URI part of the name QName */
    xmlChar *mode;	/* the local part of the mode QName */
    xmlChar *modeURI;	/* the URI part of the mode QName */
    xmlNodePtr content;	/* the template replacement value */
    xmlNodePtr elem;	/* the source element */
};

The in-memory structure corresponding to an XSLT Template


xsltTemplatePtr

typedef xsltTemplate *xsltTemplatePtr;


struct xsltDecimalFormat

struct xsltDecimalFormat {
    struct _xsltDecimalFormat *next; /* chained list */
    xmlChar *name;
    /* Used for interpretation of pattern */
    xmlChar *digit;
    xmlChar *patternSeparator;
    /* May appear in result */
    xmlChar *minusSign;
    xmlChar *infinity;
    xmlChar *noNumber; /* Not-a-number */
    /* Used for interpretation of pattern and may appear in result */
    xmlChar *decimalPoint;
    xmlChar *grouping;
    xmlChar *percent;
    xmlChar *permille;
    xmlChar *zeroDigit;
};

Data structure of decimal-format


xsltDecimalFormatPtr

typedef xsltDecimalFormat *xsltDecimalFormatPtr;


struct xsltDocument

struct xsltDocument {
    struct _xsltDocument *next;	/* documents are kept in a chained list */
    int main;			/* is this the main document */
    xmlDocPtr doc;		/* the parsed document */
    void *keys;			/* key tables storage */
};

Data structure associated to a parsed document


xsltDocumentPtr

typedef xsltDocument *xsltDocumentPtr;


struct xsltTransformContext

struct xsltTransformContext {
    xsltStylesheetPtr style;		/* the stylesheet used */
    xsltOutputType type;		/* the type of output */

    xsltTemplatePtr  templ;		/* the current template */
    int              templNr;		/* Nb of templates in the stack */
    int              templMax;		/* Size of the templtes stack */
    xsltTemplatePtr *templTab;		/* the template stack */

    xsltStackElemPtr  vars;		/* the current variable list */
    int               varsNr;		/* Nb of variable list in the stack */
    int               varsMax;		/* Size of the variable list stack */
    xsltStackElemPtr *varsTab;		/* the variable list stack */

    /*
     * Extensions
     */
    xmlHashTablePtr   extFunctions;	/* the extension functions */
    xmlHashTablePtr   extElements;	/* the extension elements */

    const xmlChar *mode;		/* the current mode */
    const xmlChar *modeURI;		/* the current mode URI */

    xsltDocumentPtr docList;		/* the document list */

    xsltDocumentPtr document;		/* the current document */
    xmlNodePtr node;			/* the current node being processed */
    xmlNodeSetPtr nodeList;		/* the current node list */
    /* xmlNodePtr current;			the node */

    xmlDocPtr output;			/* the resulting document */
    xmlNodePtr insert;			/* the insertion node */

    xmlXPathContextPtr xpathCtxt;	/* the XPath context */
    xsltTransformState state;		/* the current state */

    /*
     * Global variables
     */
    xmlHashTablePtr   globalVars;	/* the global variables and params */

    xmlNodePtr inst;			/* the instruction in the stylesheet */

    int xinclude;			/* should XInclude be processed */

    const char *      outputFile;	/* the output URI if known */
};


xsltTransformContextPtr

typedef xsltTransformContext *xsltTransformContextPtr;


struct xsltStylePreComp

struct xsltStylePreComp {
    struct _xsltStylePreComp *next;/* chained list */
    xsltStyleType type;		/* type of the element */
    xsltTransformFunction func; /* handling function */
    xmlNodePtr inst;		/* the instruction */

    /*
     * Pre computed values
     */

    xmlChar *stype;             /* sort */
    int      has_stype;		/* sort */
    int      number;		/* sort */
    xmlChar *order;             /* sort */
    int      has_order;		/* sort */
    int      descending;	/* sort */

    xmlChar *use;		/* copy, element */
    int      has_use;		/* copy, element */

    int      noescape;		/* text */

    xmlChar *name;		/* element, attribute, pi */
    int      has_name;		/* element, attribute, pi */
    xmlChar *ns;		/* element */
    int      has_ns;		/* element */

    xmlChar *mode;		/* apply-templates */
    xmlChar *modeURI;		/* apply-templates */

    xmlChar *test;		/* if */

    xsltTemplatePtr templ;	/* call-template */

    xmlChar *select;		/* sort, copy-of, value-of, apply-templates */

    int      ver11;		/* document */
    xmlChar *filename;		/* document URL */
    int      has_filename;	/* document */

    xsltNumberData numdata;	/* number */

    xmlXPathCompExprPtr comp;	/* a precompiled XPath expression */
    xmlNsPtr *nsList;		/* the namespaces in scope */
    int nsNr;			/* the number of namespaces in scope */
};

The in-memory structure corresponding to XSLT stylesheet constructs precomputed data.


xsltStylePreCompPtr

typedef xsltStylePreComp *xsltStylePreCompPtr;


xsltTransformFunction ()

void        (*xsltTransformFunction)        (xsltTransformContextPtr ctxt,
                                             xmlNodePtr node,
                                             xmlNodePtr inst,
                                             xsltStylePreCompPtr comp);

signature of the function associated to elements part of the stylesheet language like xsl:if or xsl:apply-templates.

ctxt : the XSLT transformation context
node : the input node
inst : the stylesheet node
comp : the compiled information from the stylesheet


enum xsltStyleType

typedef enum {
    XSLT_FUNC_COPY=1,
    XSLT_FUNC_SORT,
    XSLT_FUNC_TEXT,
    XSLT_FUNC_ELEMENT,
    XSLT_FUNC_ATTRIBUTE,
    XSLT_FUNC_COMMENT,
    XSLT_FUNC_PI,
    XSLT_FUNC_COPYOF,
    XSLT_FUNC_VALUEOF,
    XSLT_FUNC_NUMBER,
    XSLT_FUNC_APPLYIMPORTS,
    XSLT_FUNC_CALLTEMPLATE,
    XSLT_FUNC_APPLYTEMPLATES,
    XSLT_FUNC_CHOOSE,
    XSLT_FUNC_IF,
    XSLT_FUNC_FOREACH,
    XSLT_FUNC_DOCUMENT,
    XSLT_FUNC_WITHPARAM,
    XSLT_FUNC_PARAM,
    XSLT_FUNC_VARIABLE,
    XSLT_FUNC_WHEN
} xsltStyleType;


struct xsltStackElem

struct xsltStackElem {
    struct _xsltStackElem *next;/* chained list */
    xsltStylePreCompPtr comp;   /* the compiled form */
    int computed;	/* was the evaluation done */
    xmlChar *name;	/* the local part of the name QName */
    xmlChar *nameURI;	/* the URI part of the name QName */
    xmlChar *select;	/* the eval string */
    xmlNodePtr tree;	/* the tree if no eval string or the location */
    xmlXPathObjectPtr value; /* The value if computed */
};


xsltStackElemPtr

typedef xsltStackElem *xsltStackElemPtr;


struct xsltStylesheet

struct xsltStylesheet {
    /*
     * The stylesheet import relation is kept as a tree
     */
    struct _xsltStylesheet *parent;
    struct _xsltStylesheet *next;
    struct _xsltStylesheet *imports;

    xsltDocumentPtr docList;		/* the include document list */

    /*
     * General data on the style sheet document
     */
    xmlDocPtr doc;		/* the parsed XML stylesheet */
    xmlHashTablePtr stripSpaces;/* the hash table of the strip-space
				   preserve space and cdata-section elements */
    int             stripAll;	/* strip-space * (1) preserve-space * (-1) */

    /*
     * Global variable or parameters
     */
    xsltStackElemPtr variables; /* linked list of param and variables */

    /*
     * Template descriptions
     */
    xsltTemplatePtr templates;	/* the ordered list of templates */
    void *templatesHash;	/* hash table or wherever compiled templates
				   informations are stored */
    void *rootMatch;		/* template based on / */
    void *keyMatch;		/* template based on key() */
    void *elemMatch;		/* template based on * */
    void *attrMatch;		/* template based on @* */
    void *parentMatch;		/* template based on .. */
    void *textMatch;		/* template based on text() */
    void *piMatch;		/* template based on processing-instruction() */
    void *commentMatch;		/* template based on comment() */
    
    /*
     * Namespace aliases
     */
    xmlHashTablePtr nsAliases;	/* the namespace alias hash tables */

    /*
     * Attribute sets
     */
    xmlHashTablePtr attributeSets;/* the attribute sets hash tables */

    /*
     * Namespaces
     */
    xmlHashTablePtr nsHash;     /* the set of namespaces in use */
    void           *nsDefs;     /* the namespaces defined */

    /*
     * Key definitions
     */
    void *keys;				/* key definitions */

    /*
     * Output related stuff.
     */
    xmlChar *method;		/* the output method */
    xmlChar *methodURI;		/* associated namespace if any */
    xmlChar *version;		/* version string */
    xmlChar *encoding;		/* encoding string */
    int omitXmlDeclaration;     /* omit-xml-declaration = "yes" | "no" */

    /* Number formatting */
    xsltDecimalFormatPtr decimalFormat;
    int standalone;             /* standalone = "yes" | "no" */
    xmlChar *doctypePublic;     /* doctype-public string */
    xmlChar *doctypeSystem;     /* doctype-system string */
    int indent;			/* should output being indented */
    xmlChar *mediaType;		/* media-type string */

    /*
     * Precomputed blocks
     */
    xsltStylePreCompPtr preComps;	/* list of precomputed blocks */
    int warnings;		/* number of warnings found at compilation */
    int errors;			/* number of errors found at compilation */
};


xsltStylesheetPtr

typedef xsltStylesheet *xsltStylesheetPtr;


enum xsltOutputType

typedef enum {
    XSLT_OUTPUT_XML = 0,
    XSLT_OUTPUT_HTML,
    XSLT_OUTPUT_TEXT
} xsltOutputType;


enum xsltTransformState

typedef enum {
    XSLT_STATE_OK = 0,
    XSLT_STATE_ERROR,
    XSLT_STATE_STOPPED
} xsltTransformState;


CHECK_STOPPED

#define CHECK_STOPPED if (ctxt->state == XSLT_STATE_STOPPED) return;

Macro to check if the XSLT processing should be stopped will return from the function


CHECK_STOPPEDE

#define CHECK_STOPPEDE if (ctxt->state == XSLT_STATE_STOPPED) goto error;

Macro to check if the XSLT processing should be stopped will goto the error: label


CHECK_STOPPED0

#define CHECK_STOPPED0 if (ctxt->state == XSLT_STATE_STOPPED) return(0);

Macro to check if the XSLT processing should be stopped will return from the function with a 0 value


xsltNewStylesheet ()

xsltStylesheetPtr xsltNewStylesheet         (void);

Create a new XSLT Stylesheet

Returns :the newly allocated xsltStylesheetPtr or NULL in case of error


xsltParseStylesheetFile ()

xsltStylesheetPtr xsltParseStylesheetFile   (const xmlChar *filename);

Load and parse an XSLT stylesheet

filename : the filename/URL to the stylesheet
Returns :a new XSLT stylesheet structure.


xsltFreeStylesheet ()

void        xsltFreeStylesheet              (xsltStylesheetPtr sheet);

Free up the memory allocated by sheet

sheet : an XSLT stylesheet


xsltIsBlank ()

int         xsltIsBlank                     (xmlChar *str);

Check if a string is ignorable

str : a string
Returns :1 if the string is NULL or made of blanks chars, 0 otherwise


xsltFreeStackElemList ()

void        xsltFreeStackElemList           (xsltStackElemPtr elem);

Free up the memory allocated by elem

elem : an XSLT stack element


xsltDecimalFormatGetByName ()

xsltDecimalFormatPtr xsltDecimalFormatGetByName
                                            (xsltStylesheetPtr sheet,
                                             xmlChar *name);

Find decimal-format by name

sheet : the XSLT stylesheet
name : the decimal-format name to find
Returns : 


xsltParseStylesheetProcess ()

xsltStylesheetPtr xsltParseStylesheetProcess
                                            (xsltStylesheetPtr ret,
                                             xmlDocPtr doc);

parse an XSLT stylesheet adding the associated structures

ret : the XSLT stylesheet
doc : and xmlDoc parsed XML
Returns :a new XSLT stylesheet structure.


xsltParseStylesheetOutput ()

void        xsltParseStylesheetOutput       (xsltStylesheetPtr style,
                                             xmlNodePtr cur);

parse an XSLT stylesheet output element and record information related to the stylesheet output

style : the XSLT stylesheet
cur : 


xsltParseStylesheetDoc ()

xsltStylesheetPtr xsltParseStylesheetDoc    (xmlDocPtr doc);

parse an XSLT stylesheet building the associated structures

doc : and xmlDoc parsed XML
Returns :a new XSLT stylesheet structure.


xsltNumberFormat ()

void        xsltNumberFormat                (xsltTransformContextPtr ctxt,
                                             xsltNumberDataPtr data,
                                             xmlNodePtr node);

Convert one number.

ctxt : the XSLT transformation context
data : the formatting informations
node : the data to format


xsltFormatNumberConversion ()

xmlXPathError xsltFormatNumberConversion    (xsltDecimalFormatPtr self,
                                             xmlChar *format,
                                             double number,
                                             xmlChar **result);

format-number() uses the JDK 1.1 DecimalFormat class:

http://java.sun.com/products/jdk/1.1/docs/api/java.text.DecimalFormat.html

Structure:

pattern := subpattern{;subpattern} subpattern := {prefix}integer{.fraction}{suffix} prefix := '\\u0000'..'\\uFFFD' - specialCharacters suffix := '\\u0000'..'\\uFFFD' - specialCharacters integer := '#'* '0'* '0' fraction := '0'* '#'*

Notation: X* 0 or more instances of X (X | Y) either X or Y. X..Y any character from X up to Y, inclusive. S - T characters in S, except those in T

Special Characters:

Symbol Meaning 0 a digit # a digit, zero shows as absent . placeholder for decimal separator , placeholder for grouping separator. ; separates formats. - default negative prefix. % multiply by 100 and show as percentage ? multiply by 1000 and show as per mille X any other characters can be used in the prefix or suffix ' used to quote special characters in a prefix or suffix.

self : the decimal format
format : the format requested
number : the value to format
result : the place to ouput the result
Returns :