Lookup table and maintaining hierarchy

Subject: Lookup table and maintaining hierarchy
From: Mir Farooq Ali <mfali@xxxxxxxxx>
Date: Sun, 06 Jun 2004 16:18:04 -0400
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
--------------------------------------------






Current Thread