2017-10-03 12 views
0

Je suis supposé écrire un XSLT pour un document XML, pour lequel s'il n'a pas de paramètre pour un élément, le XSLT doit considérer une valeur nulle. La sortie doit être un document XML dans lequel les éléments sans valeur dans le document XML d'origine, doivent être imprimés comme <tagName>Null</tagName>La valeur null doit être imprimée s'il n'y a pas de valeur pour l'élément xml

Ceci est le document xml

<salesOrderRequest> 
 
<invoiceNo>1245</invoiceNo> 
 
<PizzaType/> 
 
<Price>1099</Price> 
 
<Discount>234</Discount> 
 
</salesOrderRequest>

Ceci est mon xslt

<?xml version="1.0" encoding="utf-8"?> 
 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XMLTransform"> 
 
<xsl:template match="/"> 
 
    <xsl:for-each select="/salesOrderRequest"> 
 
    <xsl:value-of select="invoiceNo"/> 
 
    <xsl:value-of select="PizzaType"/> 
 
    <xsl:value-of select="Price"/> 
 
    <xsl:value-of select="Discount"/> 
 
    </xsl:for-each> 
 
</xsl:template> 
 
</xsl:stylesheet>

<salesOrderRequest> 
 
    <invoiceNo>1245</invoiceNo> 
 
    <PizzaType>Null</PizzaType> 
 
    <Price>1099</Price> 
 
    <Discount>234</Discount> 
 
    </salesOrderRequest>

Répondre

1

Essayez:

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XMLTransform"> 

    <xsl:template match="/"> 
    <xsl:apply-templates select="/salesOrderRequest/*"/> 
    </xsl:template> 

    <xsl:template match="salesOrderRequest/*" priority="1"> 
    <xsl:value-of select="."/> 
    </xsl:template> 

    <xsl:template match="salesOrderRequest/*[.='']" priority="2"> 
    <xsl:text>null</xsl:text> 
    </xsl:template> 

</xsl:stylesheet> 
+0

travaillé comme un charme Michael. comment est-il transféré au modèle nul s'il n'y a pas de condition if. Je me demandais juste. –

+1

Il regarde toutes les règles du modèle correspondant et sélectionne celui avec la plus haute priorité. –

1

Dans XSLT 2.0 ou 3.0, pour

essayer

<xsl:value-of select="if (normalize-space(PizzaType)) 
    then PizzaType 
    else 'Null' "/> 

ou (si vous ne voulez pas accepter <PizzaType> </PizzaType> comme équivalent à <PizzaType/>)

<xsl:value-of select="if (PizzaType ne '') 
    then PizzaType 
    else 'Null' "/> 

ou

<xsl:value-of select="(PizzaType[. ne ''], 'Null')[1]"/> 

Si vous avez besoin d'une solution dans XSLT 1.0, vous devez marquer votre question de cette façon.