[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: cross reference call of templates in xslt

Subject: Re: cross reference call of templates in xslt
From: "Michael Richter" <A6Sr.CRD@xxxxxxx>
Date: Thu, 18 Dec 2008 08:03:57 +0100
Re:  cross reference call of templates in xslt
Hi,
Thank you for the help. You are right -i had some errors in my example (cause: i tried to keep it short and simple - my real files are much bigger and complexer). So what you did is ok and works. I have a further issue with it -please see the following input example:
<?xml version="1.0" encoding="UTF-8"?>
<X>
   <Daten>
     <Dokument>
       <Primaerdokument>
         <Dateiname>test.txt</Dateiname>
      </Primaerdokument>
       <Adress_Informationen>
         <Absender>
           <Referenz>d1139077-ed5b-4be8-9eaa-775ab4052c5c</Referenz>
         </Absender>
       </Adress_Informationen>
     </Dokument>
     <Adresse>
       <Name>
         <Name_ID>d1139077-ed5b-4be8-9eaa-775ab4052c5c</Name_ID>
         <Anrede>a</Anrede>
       </Name>
       <Anschrift>
         <Strasse>i</Strasse>
       </Anschrift>
     </Adresse>
     <Adresse>
       <Name>
         <Name_ID>1234567890</Name_ID>
         <Anrede>another</Anrede>
       </Name>
       <Anschrift>
         <Strasse>just a street</Strasse>
       </Anschrift>
     </Adresse>
   </Daten>
</X>

I need to get just the one and only correct address-data (in "Adresse") put at possion of ""Referenz" - identified by the value of <Referenz>d1139077-ed5b-4be8-9eaa-775ab4052c5c</Referenz> and <Name_ID>d1139077-ed5b-4be8-9eaa-775ab4052c5c</Name_ID>

So i thought i need to give a parameter by the template call:
<xsl:apply-template name="adresse" select="../../Daten/Adresse"><xsl:with-param name="referenceID" select="./Adress_Informationen/Absender/Referenz" /></xsl:apply-template>

and in the template of "adresse" i am testing <xsl:if test="./Name/Name_ID = $referenceID">
if the "Name_ID" is equal to the Parameter "$referenceID" - but no luck with it. The output is all the data in "Adresse but not included in my formated XML-Tags.

Do you have another tip for me? I don't see my mistake. I think it should be possible to filter and select just the one <Adresse>-Tag i need to put the data at position of "Referenz".

Here is my actual result (i cut the correct part before "</Primaerdokument>"):
...</Primaerdokument>
      
        d1139077-ed5b-4be8-9eaa-775ab4052c5c
        a
        i
      
      
        Web
        16
        dienstlich
      
    
      
        1234567890
        another
        just a street
      
    </Dokument></XDOMEA>


-------- Original-Nachricht --------
> Datum: Wed, 17 Dec 2008 17:37:08 -0500
> Von: "G. Ken Holman" <gkholman@xxxxxxxxxxxxxxxxxxxx>
> An: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Betreff: Re:  cross reference call of templates in xslt

> At 2008-12-17 20:29 +0100, Michael Richter wrote:
> >Hi,
> >I have a XSL-Stylesheet:
> >...
> >My XML-File as Input:
> >...
> >Now my Result:
> >?xml version="1.0" encoding="UTF-8"?>
> ><X>
> ><Dokument>
> ><Primaerdokument>
> ><Dateiname>test (080011538) (080011547).txt</Dateiname>
> ></Primaerdokument>
> >
> >         1234567890
> >         a
> >         i
> >  </Dokument>
> >  </XDOMEA>
> 
> I did not get this result running the stylesheet that you posted.
> 
> And the data in your <Dateiname> result element does not match 
> anything in your source.
> 
> So I just guessed at some of your results.
> 
> >So i need the information of the part of "Adresse" put into the part 
> >of "Primaerdokument".
> >
> >I need the following result:
> >?xml version="1.0" encoding="UTF-8"?>
> ><X>
> ><Dokument>
> ><Primaerdokument>
> ><Dateiname>test (080011538) (080011547).txt</Dateiname>
> ></Primaerdokument>
> ><Name_ID>1234567890</Name_ID>
> ><adr_name>a</adr_name>
> ><adr_anrede>i</adr_anrede>
> >  </Dokument>
> >  </XDOMEA>
> >
> >So: Is it possible to do with XSLT what i need?
> 
> Yes ... XSLT is so powerful it can create any XML structure output 
> from any XML structure input ... the question is how easy is 
> it?  Note I am speaking of structure and vocabulary, not syntax.
> 
> >And what do i need to change in my XSLT-File? I'm doing the 
> >Transformatino in Java with javax.xml.transform.Transformer
> 
> There were a number of faults in the stylesheet including incorrect 
> addresses and the use of a named template instead of a matching 
> template.  And even then at the lower level it seemed you were using 
> non-existent elements.
> 
> I hope the code below helps.
> 
> . . . . . . . . Ken
> 
> t:\ftemp>type richter.xml
> <?xml version="1.0" encoding="UTF-8"?>
> <X>
>    <Daten>
>      <Dokument>
>        <Primaerdokument>
>          <Dateiname>test.txt</Dateiname>
>       </Primaerdokument>
>        <Adress_Informationen>
>          <Absender>
>            <Referenz>d1139077-ed5b-4be8-9eaa-775ab4052c5c</Referenz>
>          </Absender>
>        </Adress_Informationen>
>      </Dokument>
>      <Adresse>
>        <Name>
>          <Name_ID>1234567890</Name_ID>
>          <Anrede>a</Anrede>
>        </Name>
>        <Anschrift>
>          <Strasse>i</Strasse>
>        </Anschrift>
>      </Adresse>
>    </Daten>
> </X>
> 
> t:\ftemp>call xslt richter.xml richter.xsl
> <?xml version="1.0" encoding="utf-8"?>
> <X xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
> xmlns:xdo="http://www.xdomea.de">
>     <Dokument>
>        <Primaerdokument>
>           <Dateiname>test.txt</Dateiname>
>        </Primaerdokument>
>        <Name_ID>1234567890</Name_ID>
>        <adr_name>a</adr_name>
>        <adr_anrede>i</adr_anrede>
>     </Dokument>
> </X>
> t:\ftemp>type richter.xsl
> <?xml version="1.0" encoding="UTF-8"?>
> <xsl:stylesheet version="2.0"
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xmlns:xdo="http://www.xdomea.de">
> 
> <xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes" />
> 
> <xsl:template match="/">
>    <xsl:for-each select="/X">
>      <X>
>        <xsl:for-each select="Daten/Dokument">
>          <Dokument>
>            <xsl:call-template name="dokument"/>
>          </Dokument>
>        </xsl:for-each>
>      </X>
>    </xsl:for-each>
> </xsl:template>
> 
> <xsl:template name="dokument">
>    <Primaerdokument>
>      <xsl:copy-of select="./Primaerdokument/Dateiname"/>
>    </Primaerdokument>
>    <xsl:call-template name="AdressenInfo" />
> </xsl:template>
> 
> <xsl:template name="AdressenInfo">
>    <xsl:if test="./Adress_Informationen/Absender/Referenz">
>      <xsl:apply-templates select="../../Daten/Adresse">
>        <xsl:with-param name="referenceID"
>                        select="./Adress_Informationen/Absender/Referenz"
> />
>      </xsl:apply-templates>
>    </xsl:if>
> </xsl:template>
> 
> <xsl:template match="Adresse">
>    <xsl:param name="referenceID" />
>    <Name_ID><xsl:value-of select="./Name/Name_ID" /></Name_ID>
>    <adr_name><xsl:value-of select="./Name/Anrede" /></adr_name>
>    <adr_anrede><xsl:value-of select="./Anschrift/Strasse" /></adr_anrede>
> </xsl:template>
> 
> </xsl:stylesheet>
> 
> t:\ftemp>rem Done!
> 
> 
> 
> --
> Upcoming XSLT/XSL-FO, UBL and code list hands-on training classes:
> :  Sydney, AU 2009-01/02; Brussels, BE 2009-03; Prague, CZ 2009-03
> Training tools: Comprehensive interactive XSLT/XPath 1.0/2.0 video
> Video sample lesson:    http://www.youtube.com/watch?v=PrNjJCh7Ppg
> Video course overview:  http://www.youtube.com/watch?v=VTiodiij6gE
> G. Ken Holman                 mailto:gkholman@xxxxxxxxxxxxxxxxxxxx
> Crane Softwrights Ltd.          http://www.CraneSoftwrights.com/s/
> Male Cancer Awareness Nov'07  http://www.CraneSoftwrights.com/s/bc
> Legal business disclaimers:  http://www.CraneSoftwrights.com/legal

-- 
"Gelebt, aber am Leben vorbei!"

Sensationsangebot verldngert: GMX FreeDSL - Telefonanschluss + DSL 
f|r nur 16,37 Euro/mtl.!* http://dsl.gmx.de/?ac=OM.AD.PD003K1308T4569a

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.