Re: problem self-referencing using document('') to reference parameters
[email protected] 24 Apr 2007 06:34:00 -0700
| Newsgroups | gmane.comp.mozilla.devel.layout.xslt |
|---|---|
| Organization | http://groups.google.com |
| Message-ID | <[email protected]> |
On Apr 23, 7:06 pm, Jonas Sicking <[email protected]> wrote: > > Not sure what you mean by "loaded as a string". Please provide a testcase. > > / Jonas The XSLT is created as a JavaScript string. var objParser = new DOMParser(); var oXslDom = objParser.parseFromString(strXslt, "text/xml"); var oProcessor = new XSLTProcessor() oProcessor.importStylesheet(oXslDom); var oResultDom = oProcessor.transformToDocument(oXmlDom); Following is a working sample HTML page that shows the problem. Click the Transform button to display the original XML document, the original XSLT document and the result of the transform. The transform simply copies the result of calling the XPath document('') function. The function should return a copy of the XSLT document, but returns the XML document. Reference (http://www.w3.org/TR/xslt#document) "Note that a zero-length URI reference is a reference to the document relative to which the URI reference is being resolved; thus document("") refers to the root node of the stylesheet." <html> <head> <title>XSLT document('')</title> <script type="text/javascript" language="javascript"> <!-- function EkUtil_HTMLEncode(s) { var strHTML = s + ""; strHTML = strHTML.replace(/\&/g, "&"); strHTML = strHTML.replace(/\</g, "<"); strHTML = strHTML.replace(/\>/g, ">"); strHTML = strHTML.replace(/\"/g, """); return strHTML; } --> </script> </head> <body> <script type="text/javascript" language="javascript"> <!-- function transform() { var strXml = "<root></root>"; var strXslt = ["<xsl:stylesheet version=\"1.0\" exclude-result-prefixes=\"dl\" xmlns:dl=\"urn:datalist\" xmlns:xsl=\"http://www.w3.org/1999/XSL/ Transform\">" ,"<xsl:output method=\"xml\" version=\"1.0\" encoding=\"UTF-8\" indent=\"yes\" omit-xml-declaration=\"yes\"/>" ,"<xsl:strip-space elements=\"*\"/>" ,"<dl:root>" ," <datalist name=\"ageRange\">" ," <item value=\"10\">0-15</item>" ," <item value=\"20\">16-25</item>" ," </datalist>" ,"</dl:root>" ,"<xsl:template match=\"/\">" ," <xsl:copy-of select=\"document('')\"/>" ,"</xsl:template>" ,"</xsl:stylesheet>"].join("\n"); try { var objSerializer = new XMLSerializer(); var objParser = new DOMParser(); var oXmlDom = objParser.parseFromString(strXml, "text/xml"); var oXslDom = objParser.parseFromString(strXslt, "text/xml"); var ta = document.getElementById("output"); ta.innerHTML = ""; ta.innerHTML += "<pre>" + EkUtil_HTMLEncode(objSerializer.serializeToString(oXmlDom.documentElement)) + "</pre>"; ta.innerHTML += "<hr />"; ta.innerHTML += "<pre>" + EkUtil_HTMLEncode(objSerializer.serializeToString(oXslDom.documentElement)) + "</pre>"; ta.innerHTML += "<hr />"; ta.innerHTML += "<pre>"; var oProcessor = new XSLTProcessor() oProcessor.importStylesheet(oXslDom); var oResultDom = oProcessor.transformToDocument(oXmlDom); ta.innerHTML += EkUtil_HTMLEncode(objSerializer.serializeToString(oResultDom.documentElement)); ta.innerHTML += "</pre>"; } catch (e) { alert("error " + e.message); } } // --> </script> <form> <input type="button" value="Transform" onclick="transform()" /> <div id="output"></div> </form> </body> </html>