Есть ли функция разделения в xpath? - PullRequest
9 голосов
/ 25 сентября 2011

Я пытаюсь разбить текст из узла <extra>text1|text2|text3|text4</extra> на четыре части "|" в качестве разделителя и восстановить 4 новых узла следующим образом.

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

Вот код, который у меня есть, который, очевидно, не работает, но должен объяснить, что я пытаюсь сделать.

<%
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
%>

1 Ответ

9 голосов
/ 26 сентября 2011

В XPath 1.0 нет функции split() (или эквивалентной).

В XPath 2.0 имеется функция tokenize().

Функцию разделения можно реализовать с помощью XSLT 1.0 - есть несколько вопросов с хорошими ответами в теге xslt.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...