templates: interface for the template processing

## templates

templates - interface for the template processing

This set of routine encapsulates XPath calls and Attribute Value Templates evaluation.

Author(s): Daniel Veillard

## Synopsis

    xmlAttrPtr	xsltAttrListTemplateProcess	(xsltTransformContextPtr ctxt,
    						 xmlNodePtr target,
    						 xmlAttrPtr attrs);
    xmlAttrPtr	xsltAttrTemplateProcess	(xsltTransformContextPtr ctxt,
    					 xmlNodePtr target,
    					 xmlAttrPtr attr);
    xmlChar *	xsltAttrTemplateValueProcess	(xsltTransformContextPtr ctxt,
    						 const xmlChar * str);
    xmlChar *	xsltAttrTemplateValueProcessNode	(xsltTransformContextPtr ctxt,
    							 const xmlChar * str,
    							 xmlNodePtr inst);
    xmlChar *	xsltEvalAttrValueTemplate	(xsltTransformContextPtr ctxt,
    						 xmlNodePtr inst,
    						 const xmlChar * name,
    						 const xmlChar * ns);
    const xmlChar *	xsltEvalStaticAttrValueTemplate	(xsltStylesheetPtr style,
    						 xmlNodePtr inst,
    						 const xmlChar * name,
    						 const xmlChar * ns,
    						 int * found);
    xmlChar *	xsltEvalTemplateString	(xsltTransformContextPtr ctxt,
    					 xmlNodePtr contextNode,
    					 xmlNodePtr inst);
    int	xsltEvalXPathPredicate		(xsltTransformContextPtr ctxt,
    					 xmlXPathCompExprPtr comp,
    					 xmlNsPtr * nsList,
    					 int nsNr);
    xmlChar *	xsltEvalXPathString	(xsltTransformContextPtr ctxt,
    					 xmlXPathCompExprPtr comp);
    xmlChar *	xsltEvalXPathStringNs	(xsltTransformContextPtr ctxt,
    					 xmlXPathCompExprPtr comp,
    					 int nsNr,
    					 xmlNsPtr * nsList);
    xmlNodePtr *	xsltTemplateProcess	(xsltTransformContextPtr ctxt,
    					 xmlNodePtr node);

## Description

## Details

### xsltAttrListTemplateProcess ()

    xmlAttrPtr	xsltAttrListTemplateProcess	(xsltTransformContextPtr ctxt,
    						 xmlNodePtr target,
    						 xmlAttrPtr attrs)

Processes all attributes of a Literal Result Element. Attribute references are applied via xsl:use-attribute-set attributes. Copies all non XSLT-attributes over to the @target element and evaluates Attribute Value Templates. Called by xsltApplySequenceConstructor() (transform.c).

`ctxt`: | the XSLT transformation context
`target`: | the element where the attributes will be grafted
`attrs`: | the first attribute
`Returns`: | a new list of attribute nodes, or NULL in case of error. (Don't assign the result to @target->properties; if the result is NULL, you'll get memory leaks, since the attributes will be disattached.)

### xsltAttrTemplateProcess ()

    xmlAttrPtr	xsltAttrTemplateProcess	(xsltTransformContextPtr ctxt,
    					 xmlNodePtr target,
    					 xmlAttrPtr attr)

Process one attribute of a Literal Result Element (in the stylesheet). Evaluates Attribute Value Templates and copies the attribute over to the result element. This does *not* process attribute sets (xsl:use-attribute-set).

`ctxt`: | the XSLT transformation context
`target`: | the element where the attribute will be grafted
`attr`: | the attribute node of a literal result element
`Returns`: | the generated attribute node.

### xsltAttrTemplateValueProcess ()

    xmlChar *	xsltAttrTemplateValueProcess	(xsltTransformContextPtr ctxt,
    						 const xmlChar * str)

Process the given node and return the new string value.

`ctxt`: | the XSLT transformation context
`str`: | the attribute template node value
`Returns`: | the computed string value or NULL, must be deallocated by the caller.

### xsltAttrTemplateValueProcessNode ()

    xmlChar *	xsltAttrTemplateValueProcessNode	(xsltTransformContextPtr ctxt,
    							 const xmlChar * str,
    							 xmlNodePtr inst)

Process the given string, allowing to pass a namespace mapping context and return the new string value. Called by: - xsltAttrTemplateValueProcess() (templates.c) - xsltEvalAttrValueTemplate() (templates.c) QUESTION: Why is this function public? It is not used outside of templates.c.

`ctxt`: | the XSLT transformation context
`str`: | the attribute template node value
`inst`: | the instruction (or LRE) in the stylesheet holding the attribute with an AVT
`Returns`: | the computed string value or NULL, must be deallocated by the caller.

### xsltEvalAttrValueTemplate ()

    xmlChar *	xsltEvalAttrValueTemplate	(xsltTransformContextPtr ctxt,
    						 xmlNodePtr inst,
    						 const xmlChar * name,
    						 const xmlChar * ns)

Evaluate a attribute value template, i.e. the attribute value can contain expressions contained in curly braces ({}) and those are substituted by they computed value.

`ctxt`: | the XSLT transformation context
`inst`: | the instruction (or LRE) in the stylesheet holding the attribute with an AVT
`name`: | the attribute QName
`ns`: | the attribute namespace URI
`Returns`: | the computed string value or NULL, must be deallocated by the caller.

### xsltEvalStaticAttrValueTemplate ()

    const xmlChar *	xsltEvalStaticAttrValueTemplate	(xsltStylesheetPtr style,
    						 xmlNodePtr inst,
    						 const xmlChar * name,
    						 const xmlChar * ns,
    						 int * found)

Check if an attribute value template has a static value, i.e. the attribute value does not contain expressions contained in curly braces ({})

`style`: | the XSLT stylesheet
`inst`: | the instruction (or LRE) in the stylesheet holding the attribute with an AVT
`name`: | the attribute Name
`ns`: | the attribute namespace URI
`found`: | indicator whether the attribute is present
`Returns`: | the static string value or NULL, must be deallocated by the caller.

### xsltEvalTemplateString ()

    xmlChar *	xsltEvalTemplateString	(xsltTransformContextPtr ctxt,
    					 xmlNodePtr contextNode,
    					 xmlNodePtr inst)

Processes the sequence constructor of the given instruction on @contextNode and converts the resulting tree to a string. This is needed by e.g. xsl:comment and xsl:processing-instruction.

`ctxt`: | the XSLT transformation context
`contextNode`: | the current node in the source tree
`inst`: | the XSLT instruction (xsl:comment, xsl:processing-instruction)
`Returns`: | the computed string value or NULL; it's up to the caller to free the result.

### xsltEvalXPathPredicate ()

    int	xsltEvalXPathPredicate		(xsltTransformContextPtr ctxt,
    					 xmlXPathCompExprPtr comp,
    					 xmlNsPtr * nsList,
    					 int nsNr)

Process the expression using XPath and evaluate the result as an XPath predicate

`ctxt`: | the XSLT transformation context
`comp`: | the XPath compiled expression
`nsList`: | the namespaces in scope
`nsNr`: | the number of namespaces in scope
`Returns`: | 1 is the predicate was true, 0 otherwise

### xsltEvalXPathString ()

    xmlChar *	xsltEvalXPathString	(xsltTransformContextPtr ctxt,
    					 xmlXPathCompExprPtr comp)

Process the expression using XPath and get a string

`ctxt`: | the XSLT transformation context
`comp`: | the compiled XPath expression
`Returns`: | the computed string value or NULL, must be deallocated by the caller.

### xsltEvalXPathStringNs ()

    xmlChar *	xsltEvalXPathStringNs	(xsltTransformContextPtr ctxt,
    					 xmlXPathCompExprPtr comp,
    					 int nsNr,
    					 xmlNsPtr * nsList)

Process the expression using XPath, allowing to pass a namespace mapping context and get a string

`ctxt`: | the XSLT transformation context
`comp`: | the compiled XPath expression
`nsNr`: | the number of namespaces in the list
`nsList`: | the list of in-scope namespaces to use
`Returns`: | the computed string value or NULL, must be deallocated by the caller.

### xsltTemplateProcess ()

    xmlNodePtr *	xsltTemplateProcess	(xsltTransformContextPtr ctxt,
    					 xmlNodePtr node)

Obsolete. Don't use it.

`ctxt`: | the XSLT transformation context
`node`: | the attribute template node
`Returns`: | NULL.