xsl-list
[Top] [All Lists]

RE: CSV instead of white-space

2002-10-29 06:35:44
If you want all the descendant elements rather than just all the
children, use select=".//*" rather than select="*". But perhaps you only
want the "leaf nodes" (descendants that don't have children). In that
case use select=".//*[not(*)]".

Michael Kay
Software AG
home: Michael(_dot_)H(_dot_)Kay(_at_)ntlworld(_dot_)com
work: Michael(_dot_)Kay(_at_)softwareag(_dot_)com 

-----Original Message-----
From: owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com 
[mailto:owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com] On Behalf Of 
Delaney Robin
Sent: 29 October 2002 10:29
To: 'xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com'
Subject: AW: [xsl] CSV instead of white-space


Michael,

Thanks for your reply/help. It almost works :-)

I get all the data right through the hierarchy but once I get 
to elements that have "children" themselves the placing of 
the "," doesn't happen. It seems to limit itself to direct 
children of the <Vertrag> (for them it works perfectly!). 
Here's a subset of the XML & XSL to explain. Within <Mandant> 
I don't see the "," between elements and the same for 
<Partner> and levels below. For all the others it's fine. Any Idea ?

Sorry to hassle you directly (don't let it put you off 
replying in the future :-) ) and thanks for any help in advance.

- Robin

XML:
      <?xml version="1.0" encoding="ISO-8859-1"?>
      <!DOCTYPE BFZV01 SYSTEM "BFZV01.dtd">
      <?xml-stylesheet type="text/xsl" 
href="E:\XML\test\XSLtemplate.xsl"?>
      <BFZV01>
              <Vertrag>
                      <Mandant>
                              <MandantenID>01</MandantenID>
                              <AnbieterNr>1234567890</AnbieterNr>
                      </Mandant>
                      <ZertifizierungsNr/>
      
<BestandsverwaltungssystemNr>01</BestandsverwaltungssystemNr>
                      <VertragsIDintern>01123456</VertragsIDintern>
                      <VertragsIDextern>123456</VertragsIDextern>
                      <OrgaNr/>
                      <InexkassosystemNr>01</InexkassosystemNr>
                      <Beitragsjahr>2001</Beitragsjahr>
                      <Beitrag 
waehrungskennzeichen="EUR">150,00</Beitrag>
                      <SachbearbeiterID>12345678</SachbearbeiterID>
                      <Legitimationsklassevertrag
legitimationsklasse="J"/>
                      <Persoenlichedaten>
                      <Versicherteperson>
                              <Partner>
      
<PartnersystemNr>01</PartnersystemNr>
                                      <PartnerID>123456789</PartnerID>
                                      <KundenNr/>
                                      <Legitimationsklassepartner
legitimationsklasse="J"/>
                                      <Rolle rolle="Rolle.VP"/>
                                      <Anrede>Herr</Anrede>
XSL:
      <xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
              <xsl:template match="Vertrag">  
                      <xsl:for-each select="*">
                                      <xsl:value-of select="."/>
                                      <xsl:if
test="position()!=last()">;</xsl:if>
                              </xsl:for-each>
                              <xsl:text>&#13;</xsl:text>
              </xsl:template>
      </xsl:stylesheet>

Output:

 01 1234567890 ;;01;01123456;123456;;01;2001;150,00;12345678;;   01
123456789    Herr




-----Ursprüngliche Nachricht-----
Von:        Michael Kay 
[SMTP:michael(_dot_)h(_dot_)kay(_at_)ntlworld(_dot_)com]
Gesendet am:        Montag, 28. Oktober 2002 18:54
An: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Betreff:    RE: [xsl] CSV instead of white-space

I'm trying to create a CSV TXT file from an XML and have the
following XSL. There's a large hierarchy of elements under 
the "Vertrag" element and I'm trying not to have to select 
them individually as the structure may change. My select 
statement works and I get all the values with at least 1 
whitespace between elements.

Is there a way to either replace the whitespace with a ";" or
to concat a ";" onto my selection ?

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
  <xsl:template match="Vertrag">
                  <xsl:value-of select="(.)"/>
          <xsl:text>&#13;</xsl:text>
  </xsl:template>
</xsl:stylesheet>


Try
<xsl:for-each select="*">
  <xsl:value-of select="."/>
  <xsl:if test="position()!=last()">,</xsl:if>
</xsl:for-each>

Michael Kay
Software AG
home: Michael(_dot_)H(_dot_)Kay(_at_)ntlworld(_dot_)com
work: Michael(_dot_)Kay(_at_)softwareag(_dot_)com


 XSL-List info and archive:  
http://www.mulberrytech.com/xsl/xsl-list

 XSL-List info and 
archive:  http://www.mulberrytech.com/xsl/xsl-list



 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



<Prev in Thread] Current Thread [Next in Thread>