XPath - extraire la valeur numérique de la chaîne
<Description>this is my value 822880494 this is my value</Description>
Je suis assez nouveau à xpath, xml et stylevision donc cela pourrait être un problème de base.
Je suis en utilisant stylevision 2010 et xpath pour créer un sps/xslt pour un schéma.
Au-dessus du nœud, vous pouvez voir qu'il y est une valeur numérique à l'intérieur du noeud et je veux extraire de la valeur et de le transformer en un lien dans mon pdf/html. Le problème est que je ne peux pas semblent pour l'extraire. Sous-chaîne n'est pas une option, car la longueur de la valeur et la position de la valeur numérique à l'intérieur de celle-ci varie.
Certains vont sans doute penser que le schéma est mal composé et que la valeur numérique doit être dans un autre node/attribut/... Il n'y a rien que je puisse faire à ce sujet depuis ce schéma est fourni par une autre société.
Merci d'avance!
OriginalL'auteur BBQ | 2012-01-17
Vous devez vous connecter pour publier un commentaire.
StyleVision 2010 semble à l'appui de XSLT 2.0, vous pouvez utiliser un 2.0 de la feuille de style et faire quelque chose comme
Ou ce que vous voulez faire avec le nombre; la chaîne avec le numéro de l'élément de contexte, à l'intérieur de la
<xsl:matching-substring>
élément.Newtover de
translate
idée (pour XSLT 1.0) devrait ressembler à ceci:Mais si votre entrée contient plusieurs numéros, qui sera tout simplement de les enchaîner.
oui, c'est ce que je voulais dire! =)
J'aime la traduire de solution, très intelligent en effet. Mais il ya une chance qu'il pourrait y avoir quelques autres lâche numéros à l'intérieur du noeud, j'ai donc opté pour une regex solution similaire à la 2.0 que vous avez suggéré. merci.
OriginalL'auteur Christopher Creutzig
Utiliser cette simple expression XPath 1.0:
Ici est un XSLT 1.0 solution:
lorsque cette transformation est appliquée sur le document XML fourni par le:
le voulait, résultat correct est produit:
Explication:
Ceci est connu comme la Double Méthode Translate proposé pour la première fois par Michael Kay. Il se compose de deux appels imbriqués les
translate()
fonction:Intérieure
translate()
. Ce produit tous les caractères de la chaîne, à l'exception des chiffres.Extérieur
translate()
. Cela supprime de la chaîne de tous les caractères produite par l'intérieurtranslate()
. Ce qui reste est juste la voulais caractères (les chiffres).OriginalL'auteur Dimitre Novatchev
Fragile, mais une solution possible dans la plaine de XSLT 1.0 serait d'utiliser une composition de
translate
(pour toutes les valeurs non numériques à des chaînes vides ou des espaces) etnormalize-space
(à couper le reste des espacestranslate
peut suffire). Ce sera certainement fonctionner que si il n'y a pas d'autres valeurs numériques au sein de la chaîne. Et, je ne peux pas actuellement de vérifier,translate
peut fonctionner que si votre chaîne contient des caractères ascii.XSLT 2.0 a plusieurs regexp fonctions. Si vous le processeur xslt permet d'utiliser EXSLT extentions, ainsi regexp contient des fonctions, ou vous pouvez marquer votre chaîne par des espaces et non-vide modèle du numéro de token.
p.s. Je suis désolé, que je ne fournissez pas tous les liens, il est difficile à partir de l'appareil.
OriginalL'auteur newtover
salut, ce sera de produire les résultats que vous requre! il vérifie chaque personnage, puis fait en sorte qu'il est un certain nombre.
XSLT 1 Solution
msxsl
là? Aussi, voir ma réponse pour une version légèrement plus courte à l'aide des fonctions XPath.juste copié à partir d'un document peut être retiré de l'ofc 🙂 est ajouté dans vs2008 de toute façon jamais causé de problèmes, aussi la réponse est pour les potes comme moi coincé avec xslt 1.0
OriginalL'auteur Treemonkey
Ce qui suit est une dérivation de la ci-dessus XSLT v1 solution, cependant, c'est précisément pour un grand nombre, comme face incorporé dans le milieu de la chaîne. Il permet également de point flottant ou entier de l'analyse. (Personnellement, je trouve cela utile pour séparer des unités de valeurs, telles que "80 mg" ou "128.4 mm2", où l'unité est "mm2", et la valeur "128.4" , et PAS "128.42".
Les éléments suivants sont quelques-uns des tests unitaires cas avec des résultats comparatifs:
OriginalL'auteur Mark Brown