XSLT fonctions et espaces de noms
Je suis un peu nouveau pour XSLT, et j'ai reçu de base de transformation. Ensuite, j'ai voulu essayer la date de manipulations, depuis mes données ont des horodateurs. Cependant, je ne peux pas sembler obtenir les fonctions de date pour le travail, et il a grandement me frustre. Je suis en essais à l'aide de Firefox 3.5, xsltproc 1.1.24, xalan 1.10, et XMLSpy 2009, et ils ont tous dit que les fonctions, je suis en train d'utiliser n'existent pas.
Mon xml ressemble à ceci:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="datetime.xsl"?>
<watcher>
<event id="1" date="2009-09-04T13:49:10-0500" type="ABCD">This is a test </event>
</watcher>
</code>
Mon xsl ressemble à ceci:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fn="http://www.w3.org/2005/02/xpath-functions"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:template match="event[@type='ABCD']">
<!-- Date: <xsl:value-of select="day-from-dateTime(xs:dateTime(@date))"/> -->
<!-- Date: <xsl:value-of select="day-from-dateTime(@date)"/> -->
Date: <xsl:value-of select="fn:day-from-dateTime(@date)"/>
</xsl:template>
</xsl:stylesheet>
Si je fais de la feuille de style de la version 2, XMLSpy se plaint qu'il ne peut pas exprimer mon date: XSLT 2.0 Debugging Error: Error in XPath 2.0 expression (Cast failed, invalid lexical value - xs:dateTime '2009-09-04T13:49:10-0500')
Si je laisse comme la version 1, il se plaint d'une erreur différents: XSLT 1.0 Debugging Error: Error in XPath expression (Unknown function - Name and number of arguments do not match any function signature in the static context - 'day-from-dateTime')
Chaque fois que j'ai essayer de modifier le fichier XSL à utiliser un espace de noms, tels que fn:jour-de-dateTime, il refuse de travailler, avec l'ensemble de mes analyseurs de dire que The function number 'http://www.w3.org/2005/02/xpath-functions:day-from-dateTime' is not available
et ses variantes. Je sais que d'autres tests que je peux utiliser la fonction substring() parfaitement, sans avoir besoin d'un préfixe d'espace de noms, et je crois que c'est dans le même espace de noms que de jour-de-dateTime.
J'ai l'impression que c'est quelque chose d'incroyablement facile, puisque tous les tutoriels afficher les fonctions utilisées, mais quelque chose qui semble échapper à moi. Quelqu'un pourrait-il me montrer ce que je suis absent?
OriginalL'auteur hufman | 2009-09-05
Vous devez vous connecter pour publier un commentaire.
Aïe, la méchante des versions de chose qui se passe ici. Beaucoup de questions que vous avez vu est parce que le processeur XSLT vous utilisez ne prend pas en charge XPath 2.0, qui est l'endroit où ce jour-de-dateTime fonction de vient de.
Je peux obtenir ce que vous essayez de faire, de travailler, avec une Le processeur Saxon - Saxon-B 9.1.0.6 que mon processeur au lieu de Xalan. (Xalan apparaît à l'appui de XPath 1.0, selon le la documentation)
Il y a quelques erreurs dans vos documents:
Le document source doit avoir le fuseau horaire que 05:00, de ne pas 0500
Le XSLT jette de la chaîne 2009-09-04T13:49:10-05:00 en xs:dateTime, ce qui est le type de l'argument de la journée-de-dateTime doit être.
Et puis il travaille
Espère que ça aide,
OK - au meilleur de ma connaissance: Xalan prend uniquement en charge XPath 1.0, qui ne connaît pas une fonction appelée jour-de-dateTime. Les processeurs qui ne soutien de XPath 2.0 jour-de-dateTime intégrée, vous pouvez déclarer un préfixe d'espace de noms URI explicitement, ou simplement utiliser des le nom de la fonction comme il est intégré. Vous avez besoin du préfixe d'espace de noms pour les types de données parce que cela n'est pas construit de la même manière que le XPath 2.0 fonctions.
Sauf si vous utilisez uniquement XPath 2.0 qui prend en charge les bibliothèques, vous aurez des problèmes à l'aide de XPath 2.0 objets internes. Si vous ne pouvez pas utiliser exclusivement XPath 2.0 libs, vous pouvez créer une fonction personnalisée bibliothèque de ré-implémente la date et le temps de manipulation des fonctionnalités dont vous avez besoin. Je pense que FunctX peut aider à ici. xqueryfunctions.com/xq/fn_day-from-datetime.html
Je suppose que depuis que je suis ciblage Firefox, j'ai besoin de coller avec XPath 1. Merci!!!!
OriginalL'auteur brabster