473,406 Members | 2,954 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,406 software developers and data experts.

applying 2 xslt to an xml via script?

Hi All

I am completely new to this, but I was wondering if I can apply 2 xslt's
subsequently to an xml, via the (client side) scripting method:

http://www.w3schools.com/xsl/xsl_client.asp

Like maybe:

<html>
<body>

<script type="text/javascript">

// Load XML
var xml = new ActiveXObject("Microsoft.XMLDOM")
xml.async = false
xml.load("cdcatalog.xml")

// Load XSL ---- 1 ----
var xsl = new ActiveXObject("Microsoft.XMLDOM")
xsl.async = false
xsl.load("cdcatalog.xsl")

// Transform ---- 1 ----
document.write(xml.transformNode(xsl))

// Load XSL ---- 2 -----
var xsl2 = new ActiveXObject("Microsoft.XMLDOM")
xsl.async = false
xsl.load("cdcatalog2.xsl")

// Transform ---- 2 -----
document.write(xml.transformNode(xsl2))

</script>

</body>
</html>

Thaks for letting me know some scripting hints if anyone came across similar
situation.

Toby
Sep 20 '06 #1
8 2059


to*****@hotpop.com wrote:

I am completely new to this, but I was wondering if I can apply 2 xslt's
subsequently to an xml, via the (client side) scripting method:
<html>
<body>

<script type="text/javascript">

// Load XML
var xml = new ActiveXObject("Microsoft.XMLDOM")
xml.async = false
xml.load("cdcatalog.xml")

// Load XSL ---- 1 ----
var xsl = new ActiveXObject("Microsoft.XMLDOM")
xsl.async = false
xsl.load("cdcatalog.xsl")

// Transform ---- 1 ----
document.write(xml.transformNode(xsl))

// Load XSL ---- 2 -----
var xsl2 = new ActiveXObject("Microsoft.XMLDOM")
xsl.async = false
xsl.load("cdcatalog2.xsl")

// Transform ---- 2 -----
document.write(xml.transformNode(xsl2))

</script>

</body>
</html>
Well new ActiveXObject('Microsoft.XMLDOM') works with IE/Win if ActiveX
is enabled. And even with IE whether the object created with new
ActiveXObject('Microsoft.XMLDOM') supports XSLT 1.0 depends on the IE
version (IE 6 and later will do, IE 5 or IE 5.5 require MSXML 3 to be
installed in replace mode). Other browsers like Mozilla or Opera do not
support script creation of ActiveX objects.

transformNode gives a string, document.write expects a string thus if
you need/want to do two document.write calls with a string result of
transformNode passed in then you can do. Those stylesheets hopefully
generate HTML snippets that belong inside the body of an HTML document.

--

Martin Honnen
http://JavaScript.FAQTs.com/
Sep 20 '06 #2
Martin Honnen wrote:
>

to*****@hotpop.com wrote:

>I am completely new to this, but I was wondering if I can apply 2
xslt's subsequently to an xml, via the (client side) scripting method:


><html>
<body>

<script type="text/javascript">

// Load XML
var xml = new ActiveXObject("Microsoft.XMLDOM")
xml.async = false
xml.load("cdcatalog.xml")

// Load XSL ---- 1 ----
var xsl = new ActiveXObject("Microsoft.XMLDOM")
xsl.async = false
xsl.load("cdcatalog.xsl")

// Transform ---- 1 ----
document.write(xml.transformNode(xsl))

// Load XSL ---- 2 -----
var xsl2 = new ActiveXObject("Microsoft.XMLDOM")
xsl.async = false
xsl.load("cdcatalog2.xsl")

// Transform ---- 2 -----
document.write(xml.transformNode(xsl2))

</script>

</body>
</html>


Well new ActiveXObject('Microsoft.XMLDOM') works with IE/Win if ActiveX
is enabled. And even with IE whether the object created with new
ActiveXObject('Microsoft.XMLDOM') supports XSLT 1.0 depends on the IE
version (IE 6 and later will do, IE 5 or IE 5.5 require MSXML 3 to be
installed in replace mode). Other browsers like Mozilla or Opera do not
support script creation of ActiveX objects.
Is there a type of scripting, one that does not need activex, that works for
different browsers, at the least ie5 and up and firefox?

>
transformNode gives a string, document.write expects a string thus if
you need/want to do two document.write calls with a string result of
transformNode passed in then you can do. Those stylesheets hopefully
generate HTML snippets that belong inside the body of an HTML document.
The second one produces html from xml, the first one produces XML from a special
form of XML.

I figured out how to merge the 2 xsl into one, but the initial question would
still be interesting how to do it.
>
Sep 20 '06 #3

to*****@hotpop.com wrote:
I am completely new to this, but I was wondering if I can apply 2 xslt's
subsequently to an xml, via the (client side) scripting method:
[Explictly coded client-side JavaScript transforms via MSXML]
Yes, this is dead easy. Use two XSL documents and apply them one after
the other.

Remember to get the _results_ of the first transform as returned by the
..transformNode() method into a variable, rather than writing it back
directly. Then apply the second transform to _this_, not to your
original XML source.

Sep 21 '06 #4
Andy Dingley wrote:
to*****@hotpop.com wrote:

>>I am completely new to this, but I was wondering if I can apply 2 xslt's
subsequently to an xml, via the (client side) scripting method:
[Explictly coded client-side JavaScript transforms via MSXML]


Yes, this is dead easy. Use two XSL documents and apply them one after
the other.

Remember to get the _results_ of the first transform as returned by the
.transformNode() method into a variable, rather than writing it back
directly. Then apply the second transform to _this_, not to your
original XML source.
OK, I think I will be able to do this. However, from what I know, the script
would work only for MS IE and not for Firefox. Actually I think the entire
approach is useless, if it doesnt work for Firefox.
Sep 21 '06 #5


to*****@hotpop.com wrote:

Is there a type of scripting, one that does not need activex, that works
for different browsers, at the least ie5 and up and firefox?
Firefox has its own API exposed to script to run XSLT transformations,
it is documented here:
<http://developer.mozilla.org/en/docs/Using_the_Mozilla_JavaScript_interface_to_XSL_Tran sformations>
Opera 9 also supports that API.

Note that this API integrates well with the W3C DOM API in allowing you
to get a document fragment node as the transformation result and insert
it into a target document. Using document.write with that API is not
really a good idea in my view, as you would first serialize the result
nodes to a string to have document.write feed it to a parser again to
create nodes.

The second one produces html from xml, the first one produces XML from a
special form of XML.
Then you don't want the approach taken in your script example, instead
you want to chain the transformations, with MSXML you would use
transformNodeToObject to transform the original XML with the first
stylesheet into a second XML document on which you could then do
transformNode to get the HTML result.

With Mozilla/Firefox you would use transformToDocument first to
transform XML to XML and then in my view transformToFragment to
transform the XML to a HTML document fragment which you could then
insert with e.g. appendChild as needed.
--

Martin Honnen
http://JavaScript.FAQTs.com/
Sep 21 '06 #6

to*****@hotpop.com wrote:
However, from what I know, the script
would work only for MS IE and not for Firefox. Actually I think the entire
approach is useless, if it doesnt work for Firefox.
If you read the right tutorials (recent ones, probably mentioning AJAX)
then some slightly more sophisticated code will work on either.

It's not entirely web-portable, but it's usefully so.

Sep 21 '06 #7
Martin Honnen wrote:
>

to*****@hotpop.com wrote:

>Is there a type of scripting, one that does not need activex, that
works for different browsers, at the least ie5 and up and firefox?


Firefox has its own API exposed to script to run XSLT transformations,
it is documented here:
<http://developer.mozilla.org/en/docs/Using_the_Mozilla_JavaScript_interface_to_XSL_Tran sformations>
This page www.w3schools.com/xsl/xsl_client.asp shows the example for IE. Sorry,
I am so new to all this stuff. Do you have a link to a page that shows me how to
code this for Firefox?

Opera 9 also supports that API.

Note that this API integrates well with the W3C DOM API in allowing you
to get a document fragment node as the transformation result and insert
it into a target document. Using document.write with that API is not
really a good idea in my view, as you would first serialize the result
nodes to a string to have document.write feed it to a parser again to
create nodes.

>The second one produces html from xml, the first one produces XML from
a special form of XML.


Then you don't want the approach taken in your script example, instead
you want to chain the transformations, with MSXML you would use
transformNodeToObject to transform the original XML with the first
stylesheet into a second XML document on which you could then do
transformNode to get the HTML result.
I think I can do this, thanks. I also was able to merge the 2 XSLs into a single
one. Dont know what would be preferable.
With Mozilla/Firefox you would use transformToDocument first to
transform XML to XML and then in my view transformToFragment to
transform the XML to a HTML document fragment which you could then
insert with e.g. appendChild as needed.

Sep 21 '06 #8
I think I can do this, thanks. I also was able to merge the 2 XSLs into
a single one. Dont know what would be preferable.
A single combined transformation will generally be more efficient than
two in succession.

--
Joe Kesselman / Beware the fury of a patient man. -- John Dryden
Sep 21 '06 #9

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

0
by: Sergio del Amo | last post by:
Hi, I use the xslt functions provided by php. I am running in my computer the package xampp(www.apachefriends.org) which includes php/apache/mysql .. In this package the php includes the sablotron...
2
by: Jon Martin Solaas | last post by:
For java programmers there exist a framework called Millstone (www.millstone.org) for programming web user-interfaces in a component oriented way. Millstone uses xslt transformations to render...
7
by: RC | last post by:
First, let me say I couldn't find a group discuss XML/XSLT. So I only choose the closest groups to post this message. Here is part of my *.xsl file <xsl:stylesheet...
6
by: RC | last post by:
Hello World, I am try do call a JavaScript function from XSLT, but I got function not avaible error. See "????" below. Would someone out there tell me how? Thank Q! <xsl:stylesheet...
4
by: Stephen | last post by:
I have the following that outputs an xml file to a div using ajax: <script type="text/javascript"> function ajaxXML(url,control_id){ if (document.getElementById) { var x =...
1
by: John Moore | last post by:
I have a set of code that is called on every page load that loads an xslt file. The xslt file has an embedded <script> tag. Loading the page mutliple times causes aspnet_wp.exe to use all available...
3
by: Simon Brooke | last post by:
I've been doing XSL transforms, converting XML to HTML, server side since 2000. In those days, clients which could do the transformation client side didn't exist, so whether to transform...
3
by: toby989 | last post by:
Hi All I am completely new to this, but I was wondering if I can apply 2 xslt's subsequently to an xml, via the (client side) scripting method: http://www.w3schools.com/xsl/xsl_client.asp ...
2
by: milecimm | last post by:
Hello, I need some help to solve the following problem (if it is possible, that's it): I'm using a xpath expression to programatically get data from my xml file. I want to transform ONLY the...
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...
0
by: Hystou | last post by:
There are some requirements for setting up RAID: 1. The motherboard and BIOS support RAID configuration. 2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
0
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
0
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows...
0
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...
0
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing,...
0
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.