xslt
  • apostrophe
  • 2010-03-19 10 views 5 likes 
    5
    apostrophes

    J'ai un problème avec le texte avec le symbole apostrophe comparaison de texte dans xsl

    exemple je tente de tester ce xml ayant le symbole est alors comment puis-je comparer?

    <xsl:for each select="country[nation='India's]"> 
    

    cela est une erreur montrant la déclaration

    Cordialement Nanda.A

    +2

    @Nanda: Vous avez déjà posé un tas de questions et reçu des réponses pour chacun d'entre eux, mais vous n'avez pas voté ni accepté de réponse. Veuillez vérifier si vous pouvez accepter certaines des réponses que vous avez reçues jusqu'à présent. Il rend les gens qui ont investi leur temps dans vos problèmes. – Tomalak

    +0

    @Nanda: Il aide également les futurs utilisateurs qui recherchent un problème similaire et rencontrent cette question - il leur dit qu'une réponse particulière a fonctionné pour vous. –

    Répondre

    9

    Une façon de le faire serait:

    <xsl:variable name="apos" select='"&apos;"'/> 
    
    <!-- ... later ... --> 
    
    <xsl:for-each select="country[nation=concat('India', $apos, 's')]"> 
    

    Le problème ici est double:

    • XSLT ne définit aucun moyen d'échappement de caractères dans les chaînes. Donc 'India\'s' n'est pas une option.
    • Vous devez passer à travers deux couches d'évaluation distinctes.

    Ce sont:

    1. XML bien formedness: Le document XML de votre programme XSLT consiste en doit être bien formé. Vous ne pouvez pas violer les règles XML.
    2. Analyse syntaxique d'expression XSLT: La chaîne de valeur d'attribut résultante (après l'analyse XML DOM) doit avoir un sens pour le moteur XSLT.

    Constructs aiment:

    <xsl:for-each select="country[nation='India's']"> 
    <xsl:for-each select="country[nation='India&apos;s']"> 
    

    passer la couche XML, mais viole la couche XSLT, car dans les deux cas, la valeur d'attribut efficace (comme stocké dans le DOM) est country[nation='India's'], ce qui est clairement une syntaxe XPath Erreur.

    Constructs aiment:

    <xsl:for-each select="country[nation=concat('India', "'", 's')]"> 
    <xsl:for-each select="country[nation=concat("India", "&apos;", "s")]"> 
    

    constituent clairement une violation de la couche XML. Mais ils ne violeraient pas la couche XSLT (!), Puisque leur valeur réelle (si le document XSLT pouvait être analysé en premier lieu) sortirait comme country[nation=concat('India', "'", 's')], ce qui est parfaitement légal en tant qu'expression XPath.

    Vous devez donc trouver un moyen de traverser à la fois le calque 1 et le calque 2. L'un des moyens est le mode variable comme indiqué ci-dessus. Une autre façon est:

    <xsl:for-each select="country[nation=concat('India', &quot;'&quot;, 's')]"> 
    

    qui semble XSLT country[nation=concat('India', "'", 's')].

    Personnellement, je trouve que la "méthode variable" est plus facile à utiliser.

    Questions connexes