2010-05-07 7 views
1

je dois transformer un morceau de XML, de sorte que la valeur de chaque noeud dans une liste je précise est réglé sur « 0 »réglage des valeurs par défaut pour les noeuds vides

par exemple:

<contract> 
<customerName>foo</customerName> 
<contractID /> 
<customerID>912</customerID> 
<countryCode/> 
<cityCode>7823</cityCode> 
</contract> 

serait transformé en

<contract> 
<customerName>foo</customerName> 
<contractID>0</contractID> 
<customerID>912</customerID> 
<countryCode>0</contractID> 
<cityCode>7823</cityCode> 
</contract> 

Comment cela peut-il être accompli en utilisant XSLT? J'ai essayé quelques exemples que j'ai trouvé, mais aucun fonctionne comme prévu

Merci

+0

Bonne question (+1). Voir ma réponse pour une solution complète. :) –

Répondre

2

Cette transformation:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 

<xsl:template match="node()|@*"> 
    <xsl:copy> 
    <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="*[not(node())]"> 
    <xsl:copy>0</xsl:copy> 
</xsl:template> 
</xsl:stylesheet> 

lorsqu'il est appliqué sur le document XML fourni:

<contract> 
<customerName>foo</customerName> 
<contractID /> 
<customerID>912</customerID> 
<countryCode/> 
<cityCode>7823</cityCode> 
</contract> 

produit le résultat désiré, correct:

<contract> 
    <customerName>foo</customerName> 
    <contractID>0</contractID> 
    <customerID>912</customerID> 
    <countryCode>0</countryCode> 
    <cityCode>7823</cityCode> 
</contract> 
+0

Vous êtes le maître XSLT, Dimitre. Merci – azathoth