[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

Re: [xsl] Generically Finding Parent Elements


Subject: Re: [xsl] Generically Finding Parent Elements
From: "Tim Dexter" <timothy.dexter@xxxxxxxxx>
Date: Tue, 6 May 2008 11:14:19 -0600

My apologies for not explaining myself fully - I appreciate your time
and effort.

We have a product that will have XML data coming in from various other
products via a service that will describe the setup of that product
e.g. accounts, company hierarchy, etc. The XML will be hierarchical in
nature - but we will not know how many levels there might be in that
hierarchy. The only fixed point of reference will be the root element
ie we will know its name.

We want to create a single generic template that can be applied to
these XMLs. There are going to be limitations in the layout but I
wanted to investigate the feasibility of being able to dynamically
loop thru the levels from top to bottom.

What I wanted to do was to create a variable that would hold the tree
of parent node elements. The XML I posted was just an example of one
such XML - I just wanted to get across the hierarchical nature of the
XML. I would want to generate a tree as follows.
  <ROOT>
   <DEPTS>
    <DEPT>
    <EMPLOYEES>
     <EMPLOYEE>
I would then be able to read the tree and 'for-each' over each level
and render the content in a tabular format. We have developed a
template to render the contents of the data at each layer, if present.

Another input XML may have more or less levels in the hierarchy and
the element names will be different.

I have been trying to get this tree using axes only looking for nodes
under the root node that have children to create the tree.

Hope that is clearer and thanks again for the input

Regards

tim



On Mon, May 5, 2008 at 2:48 PM, Darcy Parker <darcyparker@xxxxxxxxx> wrote:
> Not sure I understand the question... (Also I am confused when you say
> looping... it sounds like you want to match="//EMPLOYEE" or something
> like that, then look up it's parent and perform some templates based
> on it...  That could make the performance poor and the code difficult
> to read.  Are you familiar with using predicates in XPath? Are you
> familiar with xsl:key and key()?  There wasn't enough info in your
> question... something doesn't sound right.)
>
> But to select the root node, it depends on the context the variable is
> being declared.
>
> Perhaps one of these statements will work?
> <xsl:variable name="root" select=".."/>
> <xsl:variable name="root" select="parent::ROOT"/>
> <xsl:variable name="root" select="ancestor::root"/>
> <xsl:variable name="root" select="/"/>
>
> Darcy
>
> On Mon, May 5, 2008 at 4:24 PM, Tim Dexter <timothy.dexter@xxxxxxxxx> wrote:
> > Hi All
> >
> >  Im struggling with a problem. Assume I have the following XML
> >
> >  <?xml version="1.0"?>
> >  <ROOT>
> >   <DEPTS>
> >   <DEPT>
> >    <DEPTNO>10</DEPTNO>
> >    <DEPTNAME>Accounting</DEPTNAME>
> >    <EMPLOYEES>
> >     <EMPLOYEE>
> >      <EMPNUM>10001</EMPNUM>
> >      <EMPNAME>Jo Bloggs</EMPNAME>
> >      <SALARY>100000</SALARY>
> >     </EMPLOYEE>
> >     <EMPLOYEE>
> >      <EMPNUM>10002</EMPNUM>
> >      <EMPNAME>Jo Smother</EMPNAME>
> >      <SALARY>220000</SALARY>
> >     </EMPLOYEE>
> >     <EMPLOYEE>
> >      <EMPNUM>10003</EMPNUM>
> >      <EMPNAME>James Dean</EMPNAME>
> >      <SALARY>1000</SALARY>
> >     </EMPLOYEE>
> >    </EMPLOYEES>
> >   </DEPT>
> >   <DEPT>
> >    <DEPTNO>20</DEPTNO>
> >    <DEPTNAME>Shipping</DEPTNAME>
> >    <EMPLOYEES>
> >     <EMPLOYEE>
> >      <EMPNUM>20001</EMPNUM>
> >      <EMPNAME>Dave Gibbons</EMPNAME>
> >      <SALARY>100000</SALARY>
> >     </EMPLOYEE>
> >     <EMPLOYEE>
> >      <EMPNUM>20002</EMPNUM>
> >      <EMPNAME>John Fisher</EMPNAME>
> >      <SALARY>220000</SALARY>
> >     </EMPLOYEE>
> >     <EMPLOYEE>
> >      <EMPNUM>20003</EMPNUM>
> >      <EMPNAME>Marti Johnson</EMPNAME>
> >      <SALARY>1000</SALARY>
> >     </EMPLOYEE>
> >    </EMPLOYEES>
> >   </DEPT>
> >   </DEPTS>
> >  </ROOT>
> >
> >  This is just a sample XML the XSL template needs to handle any number
> >  of levels in the XML - the only known element is the ROOT name. I need
> >  to be able to pull the parent node tree into a variable so I can then
> >  loop over them. The looping I can handle, any help on grabbing the
> >  parent element names in a tree gratefully received.
> >
> >  Thanks
> >
> >  Tim


Current Thread
Keywords