2017-01-19 2 views
0

Utilisation XPath 1.0 veulent obtenir la liste des noeuds de texte appliquant la fonction « substring » XPath sur chaque nœud textefonction XPath sur plusieurs nœuds de texte

substring(//p/text(), 10) 

donne seulement une première de sous-chaîne de texte, lorsque

//p/text() 

donne tous, mais veulent toutes les sous-chaînes comme mis

EDIT:

Essayé

//p/substring(text(), 10) 

Says expression XPath invalide

Comment puis-je y parvenir?

Merci à l'avance

+0

Ce que vous décrivez n'est pas possible dans une seule expression XPath 1.0 sans l'utilisation de fonctions personnalisées. Dans quel type de contexte utilisez-vous ce XPath (XSLT, .NET, Java, etc.)? S'il vous plaît nous montrer le code où vous invoquez ce XPath. – JLRishe

+0

Bien sûr, je peux le faire à partir du code, mais mon code actuel est général et je veux le faire en utilisant XPath, merci pour la réponse, travaillera sur la solution que vous avez décrite :) –

+0

EXSLT définit une fonction qui vous permettrait de faire ceci: [dyn: map (// p/text, 'substring (., 10)')] (http://exslt.org/dyn/functions/map/index.html). Cette page indique qu'il n'y a pas de processeurs XSLT connus ou de bibliothèques tierces prenant en charge cette fonction, mais si votre moteur XPath le supporte ou quelque chose de similaire, vous pouvez l'utiliser. – JLRishe

Répondre

1

Si vous voulez un ensemble de chaînes que le résultat d'une XPath 1.0 expression, alors vous êtes hors de la chance, parce qu'il ya dans XPath 1.0 est pas ce type de données: les seules collections disponibles sont des collections de nœuds, et vous ne pouvez sélectionner que des nœuds qui existent déjà, vous ne pouvez pas en créer de nouveaux.

Avec XPath 2.0 est un morceau de gâteau:

//p/text()/substring(., 10) 

Donc, si vous pouvez, vous trouverez un processeur XPath 2.0.