2009-09-30 9 views
1

J'apprends XSLT via "Commencer XSLT 2.0 du débutant au professionnel". A la suite du code source du livre, je l'ai essayé de compiler dans Visual Studio 2008 TS:Erreur "expression XPath non valide" dans Visual Studio 2008 TS

<xsl:template match="Program"> 
    <div> 
    <p> 
     <xsl:if test="@flag"> 
     <img src="{if (@flag = 'favorite') then 'favorite' else 'interest'}.gif" 
      alt="[{if (@flag = 'favorite') then 'Favorite' else 'Interest'}]" 
      width="20" height="20" /> 
     </xsl:if> 
     <!-- ... --> 
    </p> 
    </div> 
</xsl:template> 

Les données XML est la suivante:

<Channel> 
    <Name>BBC1</Name> 
    <Program rating="5" flag="favorite"> 
    <!-- ... --> 
    </Program> 
    <!-- ... --> 
</Channel> 

Cependant, quand je compile ce code I get:

 
'string(if (@flag = 'favorite') then 'favorite' else 'interest')' 
is an invalid XPath expression. 

J'ai vérifié le site Web du livre à la recherche d'une errata, malheureusement cela n'a pas été couvert. Tout pointeur serait fantastique.

+0

@Eval_Penguin: S'il vous plaît ne vous torture pas en convertissant ' "<"' 'à "<"'. Au lieu de cela, vous pouvez utiliser le bouton de l'éditeur de format de code "0101" ou vous pouvez mettre en retrait des blocs de code avec quatre espaces. Vous aurez même la coloration syntaxique gratuite. ;-) – Tomalak

Répondre

1

Visual Studio prend en charge XSLT 1.0. AFAIK aucun produit de Microsoft ne soutient encore Xslt 2.0; XQuery 1.0 dans SQL Server est le plus proche.

Editer: Pour être clair, la syntaxe if..then..else est XPath 2.0, pas XPath 1.0.

+0

Merci pour la raison de ce problème – AdamWhite

1

Xslt est beaucoup plus bavard

vous devez utiliser somehting comme ceci:

<img> 
<xsl:attribute name="src"> 
<xsl:choose><xsl:when test="@flag='favorite'">favorite</xsl:when><xsl:otherwise>interest</xsl:otherwise></xsl:choose> 
</xsl:attribute> 
</img> 
+0

Merci pour la solution à ce problème. – AdamWhite

+0

Et cette verbosité supplémentaire est la raison pour laquelle il est dommage que Microsoft n'implémente pas XSLT 2.0! –