xsl-list
[Top] [All Lists]

RE: XSLT real time use of XML to XML Transformation (Updated Querry)

2003-06-11 09:39:23
Heath,

At 10:55 AM 6/11/2003, you wrote:
Firstly, Wendell thanks, and it's Heath.

You're welcome.

Outstanding suggestion, thanks for introducing me to a new concept! It clearly fixes my node-tree problem. I had it pointed out to me on another forum that my following-sibling method would be problematic as the number of Users grew. Your method seems to be a bette solution all around.

There's also an in-between solution that doesn't use keys, just pulls the data using following-sibling::CLIENTDATA[1] (and [2] and [3]); but the key-based solution is somewhat more robust in the face of anomalous data.

Now my tree is working perfectly, but I'm still having trouble getting that data to be accessible to my stylesheet.

I'm afraid you're going to have to turn to someone familiar with how to configure ASP to elucidate why your second transform isn't running.

BTW if you are pulling all USER nodes with <xsl:apply-templates select="//USER" />, you don't need the template <xsl:template match="CLIENTDATA"/>, since CLIENTDATA nodes will never be traversed on their own. You only need it if you are doing the regulation depth-first traversal of the entire document that XSLT will provide for by default. (You may want to study up on the XSLT processing model if this is mysterious to you.)

Cheers,
Wendell

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; version="1.0">
<xsl:output omit-xml-declaration="yes"/>
<xsl:output indent="yes"/>

<xsl:key name="data-by-agent" match="CLIENTDATA"
use="generate-id(preceding-sibling::USER[1])"/>

<xsl:template match="/">

<DOCUMENT>
<xsl:apply-templates select="//USER" />
</DOCUMENT>

<xsl:for-each select="//AGENT/AGENTNAME">
If you see <xsl:value-of select="."/> tell him this is the new tree.<BR/>
</xsl:for-each>

<xsl:for-each select="//USER">
If you see <xsl:value-of select="."/> tell him this is the old tree.<BR/>
</xsl:for-each>

</xsl:template>

<xsl:template match="CLIENTDATA"/>

<xsl:template match="USER">
   <AGENT>
     <xsl:variable name="thisagentdata"
       select="key('data-by-agent', generate-id())"/>
     <AGENTNAME><xsl:value-of select="."/></AGENTNAME>
     <AGENTID>
       <xsl:value-of select="$thisagentdata[1]"/>
     </AGENTID>
     <AGENTAGE>
       <xsl:value-of select="$thisagentdata[2]"/>
     </AGENTAGE>
     <AGENTSTATUS>
       <xsl:value-of select="$thisagentdata[3]"/>
     </AGENTSTATUS>
   </AGENT>
</xsl:template>

</xsl:stylesheet>

and my ASP:

<%
'load the data
set source = server.createObject("Msxml2.DOMDocument")
source.async = false
dataFile = Server.mappath("convertxml.xml")
source.load dataFile

'load stylesheet
set XSLDoc = server.createObject("Msxml2.DOMDocument")
XSLDoc.async = false
stylesheetfile=server.mappath("convertxml_2.xsl")
XSLDoc.load stylesheetfile

Response.Write "<B>everthing after this line is the first transformation <BR></B>"
response.write source.transformNode(XSLDoc)
Response.Write "<B>everthing before this line is the first transformation <BR></B>"


'maker do
set newSource = server.createObject("Msxml2.DOMDocument")
newSource.async = False
newSource.validateOnParse = True
source.transformNodeToObject XSLDoc,newSource

Response.Write "<B>everthing after this line is the second transformation</B><BR>"
response.write newSource.transformNode(XSLDoc)
Response.Write "<B>everthing before this line is the second transformation</B><BR>"

%>

I get this output:

<B>everthing after this line is the first transformation <BR></B>
<DOCUMENT>
        <AGENT>
                <AGENTNAME>Agent Smith</AGENTNAME>
                <AGENTID>Asmith</AGENTID>
                <AGENTAGE>33</AGENTAGE>
                <AGENTSTATUS>Agent</AGENTSTATUS>
        </AGENT>
        <AGENT>
                <AGENTNAME>Agent Clyde</AGENTNAME>
                <AGENTID>Aclyde</AGENTID>
                <AGENTAGE>35</AGENTAGE>
                <AGENTSTATUS>Agent in Training</AGENTSTATUS>
        </AGENT>
</DOCUMENT>
If you see Agent Smith tell him this is the old tree.<BR />
If you see Agent Clyde tell him this is the old tree.<BR />
<B>everthing before this line is the first transformation <BR></B>

<B>everthing after this line is the second transformation</B><BR>
<B>everthing before this line is the second transformation</B><BR>


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list

___&&__&_&___&_&__&&&__&_&__&__&&____&&_&___&__&_&&_____&__&__&&_____&_&&_
    "Thus I make my own use of the telegraph, without consulting
     the directors, like the sparrows, which I perceive use it
     extensively for a perch." -- Thoreau


XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



<Prev in Thread] Current Thread [Next in Thread>
  • RE: XSLT real time use of XML to XML Transformation (Updated Querry), Wendell Piez <=