O XSLT possui uma function Split ()?

Eu tenho uma string em um nó e gostaria de dividir a string em ‘?’ e retorne o último item na matriz.

Por exemplo, no bloco abaixo:

  /newpage.aspx?  Link text  

Eu gostaria de dividir o valor someNode .

Edit: Aqui está o VB.Net que eu uso para carregar o Xsl para minha página Asp.Net:

 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() 

Atualização: aqui está um exemplo de divisão de XML em um nó específico

Use um método recursivo:

               

Se você pode usar o XSLT 2.0 ou superior, você pode usar tokenize(string, separator) :

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

Veja a referência da function XPath do w3schools .

Por padrão, o .NET não suporta o XSLT 2.0, e muito menos o XSLT 3.0. Os únicos processadores 2.0+ conhecidos para .NET são o Saxon for .NET com IKVM , Exselt , um processador .NET XSLT 3.0 atualmente em versão beta e o processador XMLPrime XSLT 2.0.

Acabei usando a function substring-after() . Veja o que funcionou para mim:

   /newpage.aspx?  Link text  

Mesmo depois de configurar a versão do meu XSLT para o 2.0, eu ainda tenho um erro ” 'tokenize()' is an unknown XSLT function. ” Ao tentar usar o tokenize() .

Adicionando outra possibilidade, se seu mecanismo de modelo suportar EXSLT , você poderá usar tokenize () a partir disso.

Por exemplo:

  ...   /newpage.aspx?    ...  

O .NET não suporta o XSLT 2.0, infelizmente. Tenho certeza que ele suporta EXSLT, que tem uma function split () . A Microsoft tem uma página mais antiga em sua implementação do EXSLT.

Você pode escrever um modelo usando as funções string-before e string-after e usá-lo. Eu escrevi um blog sobre isso.

Finalmente surgiu um modelo xslt que dividiria uma string delimitada em substrings. Eu não afirmo que é o script mais inteligente, mas certamente resolve o meu problema.

Folha de estilo:

         

Arquivo XML (a ser transformado):

     C:\ProgramFiles\SomeWierdSoftware \   

O XSLT 1.0 não possui uma function split per se, mas você poderia alcançar o que está tentando fazer com as funções substring-before e substring-after.

Como alternativa, se você estiver usando um mecanismo Microsoft XSLT, poderá usar o C # in-line.

Apenas para o registro, se você está fazendo isso com 1.0, e você realmente precisa de um split / tokenise, você precisa das extensões xslt .