xdmp:xslt-invoke( $path as xs:string, [$input as node()?], [$params as map:map?], [$options as (element()|map:map)?] ) as document-node()*
Executes an XSLT stylesheet against a node.
Parameters | |
---|---|
path | The path of the stylesheet to be executed. The path is resolved against the root of the App Server evaluating the query, the Modules directory, or relative to the calling module. For details on resolving paths, see "Importing XQuery Modules and Resolving Paths" in the Application Developer's Guide. |
input | The context node to which the stylesheet is applied. |
params |
The stylesheet parameter values for this evaluation.
Each key in the map is a string representing the name of the parameter
in Clark notation: "{namespaceURI}localname". The function
xdmp:key-from-QName
is a convenient way to generate these keys.
Each entry in the map is the value of the corresponding parameter.
|
options |
The options node. The default value is (). The node
must be in the
xdmp:eval namespace. See the
xdmp:eval section for a list of
options.
Additional options include:
|
http://marklogic.com/xdmp/privileges/xslt-invoke
When running an XSLT stylesheet in MarkLogic, you pass in a node on which the stylesheet operates. Many stylesheets are written to expect the initial node to be a document node. In other XSLT processors, the node you pass to the stylesheet is typically read in from the filesystem and is always treated as a document node. In MarkLogic, you often get the node to pass to the stylesheet as the result of a query or a search, and the node is not necessarily a document node. Therefore, if your stylesheet expects the context node to be a document node, make sure to pass in a document node and not an element node. If you pass in an element node to a stylesheet that has default template rules to expect a document node, then you might miss the processing on the element you passed in (because the stylesheet might expect the child node to be the root element of the XML document, but if you passed in the root element instead of its parent document node, then the child nodes would be the children of the root element, causing the root element to miss its default processing).
xquery version "1.0-ml"; (: this example requires a document named hello.xsl directly at the App Server root with the following content: <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> <xsl:template match="/"> <xsl:text>hello</xsl:text> </xsl:template> </xsl:stylesheet> :) xdmp:xslt-invoke("/hello.xsl", document{ <foo/> }) => hello
xquery version "1.0-ml" ; (: Hello World example for xslt:invoke, with a parameter. Assumes a stylesheet named params.xsl directly at the App Server root with the following content: <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:f="foo" xmlns:b="bar" version="2.0"> <xsl:param name="f:pName"/> <xsl:param name="b:bName"/> <xsl:param name="cName"/> <xsl:param name="greeting" select="'Hi there '"/> <xsl:template match="/"> <output> <xsl:copy-of select="node"/> <greeting><xsl:value-of select="$greeting"/></greeting> <param><xsl:value-of select="$f:pName"/></param> <param><xsl:value-of select="$b:bName"/></param> <param><xsl:value-of select="$cName"/></param> </output> </xsl:template> </xsl:stylesheet> :) let $params := map:map() let $_put := map:put( $params, xdmp:key-from-QName(fn:QName("foo", "pName")), "Stephen") let $_put := map:put( $params, xdmp:key-from-QName(fn:QName("bar", "bName")), "Ron") let $_put := map:put( $params, "cName", "Dave") return xdmp:xslt-invoke("/params.xsl", document { <node>Hello World</node> }, $params) => <?xml version="1.0" encoding="ASCII"?> <output xmlns:f="foo" xmlns:b="bar"> <node>Hello World</node> <greeting>Hi there </greeting> <param>Stephen</param> <param>Ron</param> <param>Dave</param> </output>
Stack Overflow: Get the most useful answers to questions from the MarkLogic community, or ask your own question.