joining tables

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • buzzw
    New Member
    • Jun 2007
    • 4

    joining tables

    Hi

    I need to join tables to get employee data records.

    document.xml
    is
    ------------------------------------------
    <document name="company">
    <table name="A">
    <r>
    <ssn>1000</ssn>
    <name>Peter</name>
    <age>45</age>
    </r>
    <r>
    <ssn>2000</ssn>
    <name>Jacob</name>
    <age>55</age>
    </r>
    </table>
    <table name="B">
    <r>
    <jobid>1001</jobid>
    <jobcd>Emp1</jobcd>
    <title>Associat e</title>
    </r>
    <r>
    <jobid>2001</jobid>
    <jobcd>Emp2</jobcd>
    <title>Manage r</title>
    </r>
    </table>
    <table name="C">
    <r>
    <ssn>1000</ssn>
    <jobid>1001</jobid>
    <salgrade>A</salgrade>
    </r>
    <r>
    <ssn>2000</ssn>
    <jobid>2001</jobid>
    <salgrade>M</salgrade>
    </r>
    </table>
    </document>
    ------------------------------------------------
    Expected output is for each ssn :

    <ssn>1000</ssn>
    <name>Peter</name>
    <age>45</age>
    <jobid>1001</jobid>
    <jobcd>Emp1</jobcd>
    <salgrade>A</salgrade>


    <ssn>2000</ssn>
    <name>Jacobr</name>
    <age>55</age>
    <jobid>2001</jobid>
    <jobcd>Emp2</jobcd>
    <salgrade>M</salgrade>

    --------------------------------------------------------------------------
    I have document.xsl stylesheet which is not working as to give above output

    document.xsl

    <?xml version="1.0" encoding="utf-8"?>
    <xsl:styleshe et version="2.0"
    xmlns:xsl="http ://www.w3.org/1999/XSL/Transform">

    <xsl:template match="/">
    <xsl:for-each select="documen t/table">
    <xsl:text>
    </xsl:text>
    <ssn><xsl:val ue-of select="//r/ssn"/></ssn>
    <xsl:text>
    </xsl:text>
    <name><xsl:valu e-of select="//r/name"/></name>
    <xsl:text>
    </xsl:text>
    <age><xsl:val ue-of select="//r/age"/></age>
    <xsl:text>
    </xsl:text>

    <jobid><xsl:val ue-of select="//r/jobid"/></jobid>

    <xsl:text>
    </xsl:text>
    <jobcd><xsl:val ue-of select="//r/jobcd"/></jobcd>

    <xsl:text>
    </xsl:text>
    <salgrade><xsl: value-of select="//r/salgrade"/></salgrade>
    <xsl:text>
    </xsl:text>

    </xsl:for-each>
    </xsl:template>
    </xsl:stylesheet>
    -----------------------------------------------
    I tried using

    <xsl:if test="@name='A' > B or C

    it just gives o/p for person ssn 1000 and does not display second record.

    Can you please suggest something .
    Thanks
  • Dormilich
    Recognized Expert Expert
    • Aug 2008
    • 8694

    #2
    to get every person loop over <r>:
    [CODE=xml]<xsl:for-each select="//r[parent::table/@name = 'A']">
    // or
    <xsl:template match="//r[parent::table/@name = 'A']">[/CODE]
    to get the other data use something like:
    [CODE=xml]// assign the job id to $id
    <xsl:value-of select="//jobcd[parent::r/jobid = $id]"/>[/CODE]
    regards

    (will check back leter when I have more time)

    Comment

    Working...