Ne XSLT ont un Split() de la fonction?
J'ai une chaîne de caractères dans un nœud et je voudrais diviser la chaîne de caractères '?' et renvoie le dernier élément du tableau.
Par exemple, dans le bloc ci-dessous:
<a>
<xsl:attribute name="href">
/newpage.aspx?<xsl:value-of select="someNode"/>
</xsl:attribute>
Link text
</a>
Je voudrais diviser le someNode
valeur.
Edit:
Voici l'VB.Net que j'utilise pour charger le Xsl pour mon Asp.Net page:
Dim xslDocPath As String = 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 XslCompiledTransform(False)
myXslDoc.Load(xslDocPath, myXsltSettings, myXMLResolver)
Dim myStringBuilder As New StringBuilder()
Dim myXmlWriter As XmlWriter = Nothing
Dim myXmlWriterSettings As New XmlWriterSettings()
myXmlWriterSettings.ConformanceLevel = ConformanceLevel.Auto
myXmlWriterSettings.Indent = True
myXmlWriterSettings.OmitXmlDeclaration = True
myXmlWriter = XmlWriter.Create(myStringBuilder, myXmlWriterSettings)
myXslDoc.Transform(xmlDoc, argumentList, myXmlWriter)
Return myStringBuilder.ToString()
Mise à jour: voici un exemple de fractionnement XML sur un nœud particulier
- Ne pas vraiment avoir rien à faire avec ASP.Net
Vous devez vous connecter pour publier un commentaire.
Utiliser une méthode récursive:
<id>
élément, au lieu de ne pas<id>
éléments.Si vous pouvez utiliser XSLT 2.0 ou supérieur, vous pouvez utiliser
tokenize(string, separator)
:Voir le w3schools fonction XPath de référence.
Par défaut .NET ne prend pas en charge XSLT 2.0 et, a fortiori, XSLT 3.0. La seule connue 2.0+ processeurs pour .NET sont Saxon pour .NET avec IKVM, Exselt, une .NET XSLT 3.0 processeur actuellement en version bêta, et XMLPrime processeur XSLT 2.0.
J'ai fini par utiliser la
substring-after()
fonction. Voici ce qui a fonctionné pour moi:Même après le réglage de la version de mon XSLT 2.0, j'ai toujours une "
'tokenize()' is an unknown XSLT function.
" erreur lorsque vous essayez d'utilisertokenize()
.L'ajout d'une autre possibilité, si votre modèle de moteur prend en charge les EXSLT, alors vous pouvez utiliser marquer() de que.
Par exemple:
.NET ne prend pas en charge XSLT 2.0, malheureusement. Je suis assez sûr qu'il prend en charge EXSLT, qui a un split() fonction. Microsoft a un les plus âgés de la page sur la mise en œuvre de EXSLT.
Vous pouvez écrire un modèle à l'aide de
string-before
etstring-after
fonctions et l'utiliser partout. J'ai écrit un blog sur ce.Enfin venu avec un xslt modèle qui permettrait de diviser une chaîne délimitée en sous-chaînes.
Je ne prétends pas que c'est le plus intelligent de script, mais sûrement résout mon problème.
Feuille de style:
Fichier XML (pour être transformé) :
XSLT 1.0 n'a pas une fonction "split" en soi, mais vous pourriez potentiellement obtenir ce que vous essayez de faire avec la sous-chaîne-avant et de la sous-chaîne-après les fonctions.
Alternativement, si vous utilisez un Microsoft moteur XSLT, vous pouvez utiliser C# en ligne.
Juste pour mémoire, si vous ne le faites pas avec la 1.0, et vous avez vraiment besoin d'un split/tokenise, vous avez besoin de la xslt.