Subject: Re: [xsl] Identity Transform and Default Templates, I think... From: "Schneeman, Brent" <BSchneem@xxxxxxxxxxx> Date: Wed, 19 Jun 2002 07:52:09 -0700 |
Thanks to J.Pietschmann, David Carlisle, Mike Brown for responding. I really appreciate it. (Mike, I hope all is well with you and yours with respect to the fires) I took the time to make an operational model, incorporating the changes suggested. And I got it to work. Thanks. Here's the original source document again: <C3PO> <BD id="foo"> <TR> <RF>The Right Foot</RF> <RK>The Right Knee</RK> <HR>The Heart</HR> <Ext id="bar"><ANewLimb>Some new Limb</ANewLimb></Ext> </TR> </BD> </C3PO> Here's the updated and operational XSL (it imports the canonical copy transform (e.g. identity transform)): <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <!--from http://www.dpawson.co.uk/xsl/sect2/identity.html#d142e45--> <xsl:import href="./identity.xsl"/> <xsl:output indent="yes"/> <!-- the C3PO template --> <xsl:template match="C3PO"> <!-- convert C3PO to SeeThreePO --> <SeeThreePO> <!-- select the BD element --> <xsl:apply-templates select="BD"/> </SeeThreePO> </xsl:template> <!--BD Template --> <xsl:template match="BD"> <!-- output Body element --> <Body id="{@id}"> <xsl:apply-templates select="TR"/> </Body> </xsl:template> <xsl:template match="TR"> <Torso> <Chest> <xsl:apply-templates select="HR"/> </Chest> <RightLeg> <xsl:apply-templates select="RF"/> <xsl:apply-templates select="RK"/> </RightLeg> <xsl:apply-templates select="Ext"/> </Torso> </xsl:template> <xsl:template match="Ext"> <Extension id="{@id}"> <!--pickup any sub elements, using the identity transform--> <xsl:apply-templates/> </Extension> </xsl:template> <xsl:template match="HR"> <Heart> <xsl:apply-templates/> </Heart> </xsl:template> <xsl:template match="RF"> <RightFoot> <xsl:apply-templates/> </RightFoot> </xsl:template> <xsl:template match="RK"> <RightKnee> <xsl:apply-templates/> </RightKnee> </xsl:template> </xsl:stylesheet> Identity.xsl looks like this: <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <!-- The identity Transform --> <!-- Whenever you match any node or any attribute --> <xsl:template match="node()|@*"> <!-- Copy the current node --> <xsl:copy> <!-- Including any attributes it has and any child nodes --> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> </xsl:stylesheet> Applying the XSL to the XML generates this output (pretty printed): <SeeThreePO> <Body id="foo"> <Torso> <Chest> <Heart>The Heart</Heart> </Chest> <RightLeg> <RightFoot>The Right Foot</RightFoot> <RightKnee>The Right Knee</RightKnee> </RightLeg> <Extension id="bar"> <ANewLimb>Some new Limb</ANewLimb> </Extension> </Torso> </Body> </SeeThreePO> That all works like a champ. (I used XALAN's built-in Process class to do this) Now, I want to transform this document: <C3PO> <SOUL>The Soul</SOUL> <BD id="foo"> <HEAD>The Head</HEAD> <TR> <RF>The Right Foot</RF> <RK>The Right Knee</RK> <HR>The Heart</HR> <Ext id="bar"><ANewLimb>Some new Limb</ANewLimb></Ext> </TR> </BD> </C3PO> and make sure that the SOUL and HEAD elements are copied. If I take the suggestion to replace only the <xsl:apply-templates select"xxx"> elements within the C3PO and BD templates with <xsl:apply-templates/>, I get the SOUL and HEAD: <SeeThreePO> <SOUL>The Soul</SOUL> <Body id="foo"> <HEAD>The Head</HEAD> <Torso> <Chest> <Heart>The Heart</Heart> </Chest> <RightLeg> <RightFoot>The Right Foot</RightFoot> <RightKnee>The Right Knee</RightKnee> </RightLeg> <Extension id="bar"> <ANewLimb>Some new Limb</ANewLimb> </Extension> </Torso> </Body> </SeeThreePO> Victory! Now I need to apply the lesson to the actual application. Thanks bunches. Note that if I globally replace the <xsl:apply-templates select"xxx"> with <xsl:apply-templates/>, the output winds up with an extra RightFoot and RightKnee in the Chest along with the Heart, and an extra Heart in the RightLeg. Regards, -Brent Schneeman XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Identity Transform and De, David Carlisle | Thread | Re: [xsl] Identity Transform and De, Schneeman, Brent |
Re: [xsl] counting average value, James Fuller | Date | Re: RV: [xsl] getting value of inpu, William S. |
Month |