Bonjour à tous !
Tout d'abord quelques mots sur le contexte de mon application : je cherche à coder une espece de petite base de données sur des sortilèges du jeu de rôle 'l'appel de cthulhu'. La première étape, la plus simple consiste à rechercher tous les sortilèges dont le nom contient un mot-clef ou un fragment de mot-clef entré par un utilisateur.
Exemple : chaîne entrée --> "Defl" ; resultat attendu --> "Deflagration mentale"
La base de données en question est stockée sous forme de fichier XML, dont la structure est la suivante :
1 2 3 4 5 6 7
|
<spellbook>
<spell type="general">
<name>Deflagration mentale</name>
<effect>bla bla</effect>
</spell>
</spellbook> |
J'ai donc créé une feuille de style, que voici :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
<xsl:stylesheet version = '1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:param name="spellName" />
<xsl:param name="spellType" />
<xsl:template match="/cthulhu/spellbook">
<xsl:if test="$spellName">
<p>spellName specified : <xsl:value-of select="$spellName"/></p>
<xsl:call-template name="name-filtering"/>
</xsl:if>
<xsl:if test="$spellType"><p>spellType specified : <xsl:value-of select="$spellType"/></p></xsl:if>
</xsl:template>
<xsl:template name="name-filtering">
<xsl:for-each select="spell">
<xsl:choose>
<xsl:when test='matches(string(name),string($spellName))'>Hit : <xsl:value-of select="name"/><br/></xsl:when>
<xsl:otherwise><xsl:value-of select="name"/><br/></xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet> |
Le problème, c'est que la partie
<xsl:when test='matches(string(name),string($spellName))'>
provoque une erreur du type:
Erreur : uncaught exception: [Exception... "Component returned failure code: 0x80600005 [nsIXSLTProcessor.importStylesheet]" nsresult: "0x80600005 (<unknown>)" location: "JS frame :: file:///home/indy/Documents/Call%20of%20Cthulhu%20Web%20Project/callofcthulhu.js :: Init :: line 22" data: no]
J'ai essayé toutes les variantes de 'matches' que je pouvais essayer, mais rien n'y fait : toujours la même erreur ! Est ce que quelqu'un pourrait m'indiquer où je me trompe ?
Merci d'avance !
Partager