add some of the fields of an XML together with XSLT (but not all) -


i great noob xslt concerned. copied , pasted stuff forum, , works. however, finetune. can find examples of how concat fields, nog how concat of fields.

i have xml

      <xs:element name="medewerker_x">         <xs:complextype>           <xs:sequence>             <xs:element name="medewerker" type="xs:string" minoccurs="0" />             <xs:element name="roepnaam" type="xs:string" minoccurs="0" />             <xs:element name="voorletters" type="xs:string" minoccurs="0" />             <xs:element name="voorvoegsel" type="xs:string" minoccurs="0" />             <xs:element name="achternaam" type="xs:string" minoccurs="0" />             <xs:element name="e-mail_werk" type="xs:string" minoccurs="0" />           </xs:sequence>         </xs:complextype>       </xs:element>  <medewerker_x>   <medewerker>654654</medewerker>   <roepnaam>mark</roepnaam>   <voorletters>mab</voorletters>   <achternaam>puist</achternaam>   <email>lala@test.com</email> </medewerker_x> <medewerker_x>   <medewerker>084680</medewerker>   <roepnaam>maarten</roepnaam>   <voorletters>m</voorletters>   <voorvoegsel>ter</voorvoegsel>   <achternaam>doornemalen</achternaam>   <email>sweetie@test.com</email> </medewerker_x> 

with xslt

<xsl:strip-space elements="*" />  <xsl:template match="/*/child::*"> <xsl:for-each select="child::*"> <xsl:if test="position() != last()"><xsl:value-of select="normalize-space(.)"/>;</xsl:if> <xsl:if test="position()  = last()"><xsl:value-of select="normalize-space(.)"/>    <xsl:text>&#xd;</xsl:text> </xsl:if> </xsl:for-each> </xsl:template> 

it outputs this:

654654;mark;mab;puist;lala@test.com 084680;maarten;m;ter;doornemalen;sweetie@test.com 

what have output this, of fields concatenated (and others no relevant):

mark puist;lala@test.com maarten ter doornemalen;sweetie@test.com 

order of fields not relevant, additional fields can there, don't mind. long 2 columns present.

can me?

edited

i think input xml (note have added root node named <root>)

<root> <medewerker_x>   <medewerker>654654</medewerker>   <roepnaam>mark</roepnaam>   <voorletters>mab</voorletters>   <achternaam>puist</achternaam>   <email>lala@test.com</email> </medewerker_x> <medewerker_x>   <medewerker>084680</medewerker>   <roepnaam>maarten</roepnaam>   <voorletters>m</voorletters>   <voorvoegsel>ter</voorvoegsel>   <achternaam>doornemalen</achternaam>   <email>sweetie@test.com</email> </medewerker_x> </root> 

with xslt:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/xsl/transform"     version="1.0">     <xsl:output method="text"/>      <xsl:template match="/">         <!-- now,  we'll loop each child `medewerker_x` of root node -->         <xsl:for-each select="root/medewerker_x">             <!-- if position greater 1, add linebreak before -->             <xsl:if test="position() &gt; 1">                 <xsl:text>&#xa;</xsl:text>             </xsl:if>             <!-- let loop of target child elements -->             <xsl:for-each select="*[self::roepnaam or self::voorvoegsel or self::achternaam or self::email]">                 <xsl:choose>                     <!-- test position of elements. in input xml,                           `email` last child element                     -->                     <xsl:when test="position() = last()">                         <xsl:text>;</xsl:text>                         <xsl:value-of select="."/>                     </xsl:when>                     <!-- tests 2nd last position -->                     <xsl:when test="position() = last()-1">                         <xsl:value-of select="."/>                     </xsl:when>                     <xsl:otherwise>                         <xsl:value-of select="."/>                         <xsl:text> </xsl:text>                     </xsl:otherwise>                 </xsl:choose>             </xsl:for-each>         </xsl:for-each>     </xsl:template>  </xsl:stylesheet> 

it outputs:

mark puist;lala@test.com maarten ter doornemalen;sweetie@test.com 

Comments

Popular posts from this blog

matlab - "Contour not rendered for non-finite ZData" -

delphi - Indy UDP Read Contents of Adata -

qt - How to embed QML toolbar and menubar into QMainWindow -