RE: [xsl] Lookup table and maintaining hierarchy

Subject: RE: [xsl] Lookup table and maintaining hierarchy
From: "Michael Kay" <mhk@xxxxxxxxx>
Date: Sun, 6 Jun 2004 21:42:03 +0100
This looks like one of those "spot the difference" competitions. In the 30
seconds I allow for looking at questions on this list, I can't spot the
difference between your lookup file and your output file.

Perhaps you should spend a little longer formulating the question.

Michael Kay 

> -----Original Message-----
> From: Mir Farooq Ali [mailto:mfali@xxxxxxxxx] 
> Sent: 06 June 2004 20:18
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] Lookup table and maintaining hierarchy
> 
> I had posted this question a long time, got some responses 
> but could not
> solve the problem completely.
> 
> Consider my XML file that looks like this
> <?xml version="1.0" encoding="utf-8" ?>
> <TM>
>    <T id="something" TC="a">
>      <Type>b</Type>
>      <Prefs>
>        <UC>S</UC>
>        <UPS>1</UPS>
>      </Prefs>
>      <ST>
>        <T id="somethinga" TC="a">
>          <Type>b</Type>
>          <Prefs>
>            <UC>S</UC>
>            <UPS>1</UPS>
>          </Prefs>
>          <ST>
>            <T id="somethingb" TC="a">
>              <Type>b</Type>
>              <Prefs>
>                <UC>S</UC>
>                <UPS>1</UPS>
>              </Prefs>
>            </T>
>            <T id="somethingc" TC="a">
>              <Type>b</Type>
>              <Prefs>
>                <UC>S</UC>
>                <UPS>2</UPS>
>              </Prefs>
>            </T>
>          </ST>
>        </T>
>        <T id="somethingd" TC="a">
>          <Type>b</Type>
>          <Prefs>
>            <UC>S</UC>
>            <UPS>2</UPS>
>          </Prefs>
>        </T>
>      </ST>
>    </T>
>    <T id="somethinge" TC="a">
>      <Type>b</Type>
>      <Prefs>
>        <UC>S</UC>
>        <UPS>2</UPS>
>      </Prefs>
>    </T>
> </TM>
> 
> 
> 
> With the following lookup file
> 
> <AB>
>    <TC name="a">
>      <TTM type="b">
>        <UCM preference="1">
>          <UC>S</UC>
>          <UPS>
>            <pa prefnum="1">
>              <XXXX>
>                <YYYY />
>                <ZZZZ />
>              </XXXX>
>            </pa>
>            <pa prefnum="2">
>              <WWWW />
>            </pa>
>          </UPS>
>        </UCM>
>      </TTM>
>    </TC>
> </AB>
> 
> 
> The generated output should look something like this
> 
> <AB>
>    <TC name="a">
>      <TTM type="b">
>        <UCM preference="1">
>          <UC>S</UC>
>          <UPS>
>            <pa prefnum="1">
>              <XXXX>
>                <YYYY />
>                <ZZZZ />
>              </XXXX>
>            </pa>
>            <pa prefnum="2">
>              <WWWW />
>            </pa>
>          </UPS>
>        </UCM>
>      </TTM>
>    </TC>
> </AB>
> 
> 
> I am using this stylesheet below
> 
> <?xml version="1.0" encoding="iso-8859-1"?>
> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
>                  version="1.0">
> 
> <xsl:output indent="yes"/>
> 
> <xsl:template match="T">
>    <xsl:variable name="tc" select="@TC"/>
>    <xsl:variable name="ttm" select="Type"/>
>    <xsl:variable name="uc" select="Prefs/UC"/>
>    <xsl:variable name="ups" select="Prefs/UPS"/>
>    <xsl:for-each select="document('ali-lookup.xml')">
>      <xsl:apply-templates mode="modify"
>                           select="/AB/TC[@name=$tc]/TTM[@type=$ttm]/
>                                   
> UCM[UC=$uc]/UPS/pa[@prefnum=$ups]/*"/>
>    </xsl:for-each>
> </xsl:template>
> 
> <xsl:template match="@*|node()">
>    <xsl:copy>
>      <xsl:apply-templates select="@*|node()"/>
>    </xsl:copy>
> </xsl:template>
> 
> <xsl:template match="*" mode="modify" priority="2">
>    <p c="{name(.)}">
>      <xsl:apply-templates mode="modify"/>
>    </p>
> </xsl:template>
> 
> <xsl:template match="@*|node()" mode="modify">
>    <xsl:copy>
>      <xsl:apply-templates select="@*|node()"/>
>    </xsl:copy>
> </xsl:template>
> 
> </xsl:stylesheet>
> 
> I am getting this
> 
> <?xml version="1.0" encoding="utf-8" ?>
> <S>
> 	<p id="something1" c="XXXX">
> 		<p id="something11" c="YYYY" />
> 		<p id="something12" c="ZZZZ" />
> 	</p>
> 	<p id="somethinga1" c="XXXX">
> 		<p id="somethinga11" c="YYYY" />
> 		<p id="somethinga12" c="ZZZZ" />
> 	</p>
> 	<p id="somethingb1" c="XXXX">
> 		<p id="somethingb11" c="YYYY" />
> 		<p id="somethingb12" c="ZZZZ" />
> 	</p>
> 	<p id="somethingc1" c="WWWW" />
> 	<p id="somethingd1" c="WWWW" />
> 	<p id="somethinge1" c="WWWW" />
> </S>
> 
> where every transformed node is at the same level. I want to preserve
> the hierarchy of the original xml file. Any help is appreciated.
> 
> Thanks,
> 
> -Farooq.
> -- 
> Mir Farooq Ali
> 
> Computer Science, Virginia Tech,
> Email: miali@xxxxxxxxx
> Web: http://purl.org/net/farooq
> Office: 525 McBryde Hall
> Tel: (540) 231-1927 (Office)
> --------------------------------------------
> (c) 2004 Mir Farooq Ali  All rights reserved
> --------------------------------------------
> 
> 
> 
> 
> 
> 
> --+------------------------------------------------------------------
> XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
> To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
> or e-mail: <mailto:xsl-list-unsubscribe@xxxxxxxxxxxxxxxxxxxxxx>
> --+--
> 



Current Thread