Jump to content
sacha74

[xslt 1.0] Data Text Into Tags

Recommended Posts

Hello,The data, to be transformed, have been extracted from a database and now there is some text data without tags. :) Here is my xml code

<body>doc simé	  <p> La table 050 permet de paramétrer les libellés qui doivent figurer sur les relevés de comptes et les écrans de consultation des mouvements sur les comptes imputés lors des opérations de transfert définies dans la table 049. </p> 	  <p> La table 050 permet aussi de paramétrer les comptes sur lesquels imputer les commissions et les frais, ainsi que les comptes de contreparties aussi bien des opérations de transfert pour une racine que pour un fonds de placement. </p> 	  <p> 		 <p> </p> La description ci-dessus n'est valable que pour le programme des opérations de transferts AS4200. Si vous utilisez le programme AS4210, seule la désignation est utilisée, la ventilation comptable étant quant à elle définie dans la table <p> 059 </p> . </p>

Here we can see that there is text without any tags ("doc simé").What I would like to obtain is:

<body><toto>doc simé</toto>	  <p> La table 050 permet de paramétrer les libellés qui doivent figurer sur les relevés de comptes et les écrans de consultation des mouvements sur les comptes imputés lors des opérations de transfert définies dans la table 049. </p> 	  <p> La table 050 permet aussi de paramétrer les comptes sur lesquels imputer les commissions et les frais, ainsi que les comptes de contreparties aussi bien des opérations de transfert pour une racine que pour un fonds de placement. </p> 	  <p> 		 <p> </p> La description ci-dessus n'est valable que pour le programme des opérations de transferts AS4200. Si vous utilisez le programme AS4210, seule la désignation est utilisée, la ventilation comptable étant quant à elle définie dans la table <p> 059 </p> . </p>

Unfortunately, my xslt file does not work. There is no modification at all.Here is my code:

<xsl:template match="body/string"><toto><xsl:value-of select="."/></toto></xsl:template>

Could anyone help me, please, to solve that problem?Thanks in advance.

Share this post


Link to post
Share on other sites

[cpde]<xsl:template match="body/text()[normalize-space()]"> <toto><xsl:value-of select="normalize-space()"/></toto></xsl:template>[/code]body/string would match elements with the name 'string', not text nodes.

Share this post


Link to post
Share on other sites

Thanks a lot for the rapidity, with which you answer me.I have to try the code you propose because it does not seem to resolve the case each time it is present in the code.Whatever, thanks. I'm going to try and I tell you...

Share this post


Link to post
Share on other sites

If I use this code:

<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xml" href="formedita.xslt"?><Paramétrage>tulo<p> </p> <table> <tr> <th> Table </th> <th> Élément </th>  </tr> <tbody> <tr> <td> 900 </td> <td> 999 </td></tr><tr> <td> 900 </td> <td> 998 </td> </tr><tr> <td> 900 </td> <td> 999 </td></tr><tr> <td> 900 </td> <td> 989 </td> </tr> </tbody> </table>Règles de calcul <p> </p> <table> <tr> <th> Mode tarification </th> <th> Critère </th> <th> Calcul du résultat </th> </tr> <tbody> <tr> <td> Plafond </td> <td> Recherche du taux ou du montant à l'unité pour le critère suivant : Montant < plafond </td> <td> <ul><li> Résultat = Montant * taux / 100 </li></ul> <ul><li> Ajout ou soustraction du montant fixe au résultat ou prise en compte du montant maximum ou minimum de la tranche (zone  ). </li></ul> </td>  </tr> <tr> <td> Frais postaux </td> <td> Frais pour mandat postal </td> <td> <ul><li> Variante par tranche, 6 premières tranches fixes et 7ème tranche supplémentaire (zone  ). </li></ul> </td>  </tr> </tbody> </table> <p> Exemple de calcul par tranche (voir ) </p> <li> Montant brut de l'opération: 10'000. </li> <li> Commission par tranche en 01000. </li> <p> </p> </Paramétrage>

In this file, there are two exemples of text without tags:"tulo"and "Règles de calcul" which after the transformation would be <toto>tulo</toto> and either for othersAnd if I apply this transformation:

<?xml version="1.0" encoding="UTF-8"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">	<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>	 	<xsl:template match="/" priority="1">	<body>	 <xsl:apply-templates/>	 <xsl:for-each select="body/text()[normalize-space()]">	<toto>	<xsl:apply-templates select="normalize-space()"/>	</toto>	</xsl:for-each>	</body>	</xsl:template>	<xsl:template match="node()">	 <xsl:copy>	 <xsl:apply-templates select="node()"/>	 </xsl:copy>	</xsl:template>	<xsl:template match="*/p/p">		<xsl:apply-templates select="node()"/>	</xsl:template>	<xsl:template match="table">	<table>	<tgroup>		<xsl:attribute name="cols"><xsl:value-of select="count(.//th)"/></xsl:attribute>			<xsl:for-each select="tr[1]">		<thead>								<row>		<xsl:for-each select="th">			<entry>				<xsl:apply-templates select="node()"/>		   </entry>		</xsl:for-each>		</row></thead>	</xsl:for-each>	<tbody>	<xsl:for-each select="tbody/tr">	 <row>	  <xsl:for-each select="td">		<entry>		<xsl:apply-templates select="node()"/>				</entry>	  </xsl:for-each>	 </row>	</xsl:for-each>	</tbody>	</tgroup>	</table>	</xsl:template></xsl:stylesheet>

The text without tags has not changed.Perhaps it is a question of priority? Do you have any idea?

Share this post


Link to post
Share on other sites

You have changed the XML, it no longer has a 'body' element.So you will need to change the stylesheet template as well:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">	<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>		<xsl:template match="Paramétrage">	<body>	 <xsl:apply-templates/>	</body>	</xsl:template>		<xsl:template match="Paramétrage/text()[normalize-space()]">	  <toto><xsl:value-of select="normalize-space()"/></toto>	</xsl:template>		<xsl:template match="node()">	 <xsl:copy>	 <xsl:apply-templates select="node()"/>	 </xsl:copy>	</xsl:template>		<xsl:template match="*/p/p">		<xsl:apply-templates/>	</xsl:template>		<xsl:template match="table">	<table>	<tgroup>		<xsl:attribute name="cols"><xsl:value-of select="count(.//th)"/></xsl:attribute>			<xsl:for-each select="tr[1]">		<thead>								<row>		<xsl:for-each select="th">			<entry>				<xsl:apply-templates/>		   </entry>		</xsl:for-each>		</row></thead>	</xsl:for-each>	<tbody>	<xsl:for-each select="tbody/tr">	 <row>	  <xsl:for-each select="td">		<entry>		<xsl:apply-templates select="node()"/>				</entry>	  </xsl:for-each>	 </row>	</xsl:for-each>	</tbody>	</tgroup>	</table>	</xsl:template></xsl:stylesheet>

Result then looks as follows:

<?xml version="1.0" encoding="UTF-8"?><body>   <toto>tulo</toto>   <p> </p>   <table>	  <tgroup cols="2">		 <thead>			<row>			   <entry> Table </entry>			   <entry> Élément </entry>			</row>		 </thead>		 <tbody>			<row>			   <entry> 900 </entry>			   <entry> 999 </entry>			</row>			<row>			   <entry> 900 </entry>			   <entry> 998 </entry>			</row>			<row>			   <entry> 900 </entry>			   <entry> 999 </entry>			</row>			<row>			   <entry> 900 </entry>			   <entry> 989 </entry>			</row>		 </tbody>	  </tgroup>   </table>   <toto>Règles de calcul</toto>   <p> </p>   <table>	  <tgroup cols="3">		 <thead>			<row>			   <entry> Mode tarification </entry>			   <entry> Critère </entry>			   <entry> Calcul du résultat </entry>			</row>		 </thead>		 <tbody>			<row>			   <entry> Plafond </entry>			   <entry> Recherche du taux ou du montant à l'unité pour le critère suivant : Montant < plafond </entry>			   <entry> 				  <ul>					 <li> Résultat = Montant * taux / 100 </li>				  </ul> 				  <ul>					 <li> Ajout ou soustraction du montant fixe au résultat ou prise en compte du montant maximum ou minimum de la tranche (zone  ). </li>				  </ul> 			   </entry>			</row>			<row>			   <entry> Frais postaux </entry>			   <entry> Frais pour mandat postal </entry>			   <entry> 				  <ul>					 <li> Variante par tranche, 6 premières tranches fixes et 7ème tranche supplémentaire (zone  ). </li>				  </ul> 			   </entry>			</row>		 </tbody>	  </tgroup>   </table>   <p> Exemple de calcul par tranche (voir ) </p>    <li> Montant brut de l'opération: 10'000. </li>    <li> Commission par tranche en 01000. </li>    <p> </p></body>

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...