2011-09-25 9 views
5

Estoy tratando de dividir un texto de un nodo <extra>text1|text2|text3|text4</extra> en cuatro partes "|" como delimitador y reconstruir 4 nuevos nodos de la siguiente manera.¿Hay una función dividida en xpath?

<g:test1>text1</g:test1> 
<g:test2>text2</g:test2> 
<g:test3>text3</g:test3> 
<g:test4>text4</g:test4> 

Aquí está el código que tengo, que obviamente no funciona, pero debería explicar lo que estoy tratando de hacer.

<% 
Dim objXML, x 

Set objXML = CreateObject("MSXML2.DOMDocument") 
objXML.async = False 
objXML.setProperty "ServerHTTPRequest", True 
objXML.Load "http://www.thesite.com/v/myxml.xml" 
objXML.setProperty "SelectionLanguage", "XPath" 

Dim xmldoc: set xmldoc = CreateObject("MSXML2.DomDocument") 
xmldoc.async = false 

Dim instruction 
Set instruction = xmldoc.createProcessingInstruction("xml", "version=""1.0"" encoding=""UTF-8"" standalone=""yes""") 
xmldoc.appendChild instruction 

Dim rss: set rss = xmldoc.createElement("rss") 
xmldoc.appendChild rss 

Dim itemNode2: Set itemNode2 = xmldoc.selectSingleNode(".//rss") 
Dim name: Set name = xmldoc.createAttribute("xmlns:g") 
name.Value = "http://base.google.com/ns/1.0" 
itemNode2.attributes.setNamedItem(name) 

Dim itemNode: Set itemNode = xmldoc.selectSingleNode(".//rss") 
Dim version: Set version = xmldoc.createAttribute("version") 
version.Value = "2.0" 
itemNode.attributes.setNamedItem(version) 
Dim channel: set channel = xmldoc.createElement("channel") 
rss.appendChild channel 

For Each x In objXML.documentElement.selectNodes(".//SAVED_EXPORT") 
    Dim item: set item = xmldoc.createElement("item") 
    channel.appendChild item 

    Dim str1: Set str1 = x.selectSingleNode("extra") 
    Dim gstrarray 
    gstrarray = split(str1.text,"|") 

    Dim gstr1: set gstr1 = xmldoc.createElement("g:test1") 
    gstr1.text =gstrarry(0) 
    item.appendChild gstr1 
    Dim gstr2: set gstr2 = xmldoc.createElement("g:test2") 
    gstr2.text =gstrarry(1) 
    item.appendChild gstr2 
    Dim gstr3: set gstr3 = xmldoc.createElement("g:test3") 
    gstr3.text =gstrarry(2) 
    item.appendChild gstr3 
    Dim gstr4: set gstr4 = xmldoc.createElement("g:test4") 
    gstr4.text =gstrarry(3) 
    item.appendChild gstr4 
Next 
Response.Write xmldoc.xml 
%> 
+0

¿Está preguntando cómo dividirse en XPath, o por qué su división en ASP no está funcionando? –

+0

Supongo que un poco de ambos si no te importa explicárselo a un novato. – user357034

Respuesta

6

no hay una función split() (o equivalente) en XPath 1.0.

Hay una función tokenize() en XPath 2.0.

Uno puede implementar la funcionalidad de división mediante XSLT 1.0 - hay varias preguntas wtih good answers en la etiqueta XSLT.

+0

Gracias por eso, pensé que vendrías y tendrías una respuesta para mí :) Pregunta tonta, ¿cómo sabría si puedo usar XPATH 2.0? Estoy realmente perdido aquí. Miré las páginas pero no ayudó mucho. Gracias por tu ayuda. – user357034

+0

@ user357034: no existe una implementación nativa .NET de XPath 2.0 (y la implementación XQuery de SQL Server es un borrador de trabajo temprano). Si está utilizando una implementación compatible con XSLT 2.0 o XQuery (como Saxon 9.x (tiene una versión especial de Saxon.NET) o XQSharp, especialmente escrita para .NET), entonces tiene XPath 2.0 también como parte de ellos. –