XSLT a-t-il une fonction Split ()?

J’ai une chaîne dans un nœud et j’aimerais diviser la chaîne sur ‘?’ et renvoyer le dernier élément du tableau.

Par exemple, dans le bloc ci-dessous:

  /newpage.aspx?  Link text  

Je voudrais partager la valeur someNode .

Edit: Voici le VB.Net que j’utilise pour charger le Xsl pour ma page Asp.Net:

 Dim xslDocPath As Ssortingng = HttpContext.Current.Server.MapPath("~/App_Data/someXslt.xsl") Dim myXsltSettings As New XsltSettings() Dim myXMLResolver As New XmlUrlResolver() myXsltSettings.EnableScript = True myXsltSettings.EnableDocumentFunction = True myXslDoc = New XslComstackdTransform(False) myXslDoc.Load(xslDocPath, myXsltSettings, myXMLResolver) Dim mySsortingngBuilder As New SsortingngBuilder() Dim myXmlWriter As XmlWriter = Nothing Dim myXmlWriterSettings As New XmlWriterSettings() myXmlWriterSettings.ConformanceLevel = ConformanceLevel.Auto myXmlWriterSettings.Indent = True myXmlWriterSettings.OmitXmlDeclaration = True myXmlWriter = XmlWriter.Create(mySsortingngBuilder, myXmlWriterSettings) myXslDoc.Transform(xmlDoc, argumentList, myXmlWriter) Return mySsortingngBuilder.ToSsortingng() 

Mise à jour: voici un exemple de fractionnement de XML sur un nœud particulier

Utilisez une méthode récursive:

               

Si vous pouvez utiliser XSLT 2.0 ou supérieur, vous pouvez utiliser tokenize(ssortingng, separator) :

 tokenize("XPath is fun", "\s+") Result: ("XPath", "is", "fun") 

Voir la référence de la fonction XPath de w3schools .

Par défaut, .NET ne prend pas en charge XSLT 2.0, et encore moins XSLT 3.0. Les seuls processeurs 2.0+ connus pour .NET sont Saxon pour .NET avec IKVM , Exselt , un processeur .NET XSLT 3.0 actuellement en version bêta et un processeur XMLPrime XSLT 2.0.

J’ai fini par utiliser la fonction subssortingng-after() . Voici ce qui a fonctionné pour moi:

   /newpage.aspx?  Link text  

Même après avoir défini la version de mon XSLT sur 2.0, j’ai toujours une fonction ‘ 'tokenize()' is an unknown XSLT function. “Erreur lors de la tentative d’utilisation de tokenize() .

En ajoutant une autre possibilité, si votre moteur de template supporte EXSLT , vous pouvez utiliser tokenize () à partir de cela.

Par exemple:

  ...   /newpage.aspx?    ...  

.NET ne supporte malheureusement pas XSLT 2.0. Je suis sûr qu’il prend en charge EXSLT, qui a une fonction split () . Microsoft a une page plus ancienne sur son implémentation d’EXSLT.

Vous pouvez écrire un modèle à l’aide ssortingng-before fonctions ssortingng-before et ssortingng-after et l’utiliser. J’ai écrit un blog à ce sujet.

Finalement, nous avons créé un modèle xslt qui diviserait une chaîne délimitée en sous-chaînes. Je ne prétends pas que c’est le script le plus intelligent, mais résout sûrement mon problème.

Feuille de style:

         

Fichier XML (à transformer):

     C:\ProgramFiles\SomeWierdSoftware \   

XSLT 1.0 n’a pas de fonction fractionnée en soi, mais vous pourriez potentiellement réaliser ce que vous essayez de faire avec les fonctions de sous-chaîne et de sous-chaîne.

Si vous utilisez un moteur Microsoft XSLT, vous pouvez également utiliser le C # inline.

Juste pour mémoire, si vous faites cela avec la version 1.0 et que vous avez vraiment besoin d’un fractionnement / jeton, vous avez besoin des extensions xslt .