2011-09-25 43 views
5

我試圖將節點<extra>text1|text2|text3|text4</extra>中的文本拆分爲四部分「|」作爲分隔符並重建4個新節點,如下所示。xpath中是否有分割函數?

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

你問如何在XPath中分割,或者你爲什麼在ASP中分割不起作用? –

+0

如果你不介意向新手解釋,我想這兩者都有一點點。 – user357034

回答

6

沒有XPath 1.0中一個split()(或等同物)的功能。

在XPath 2.0中有一個tokenize()函數。

我們可以使用XSLT 1.0實現分裂的功能 - 有幾個問題wtih good answers在XSLT標籤。

+0

謝謝你,我想你會來,併爲我的答案:)愚蠢的問題,我怎麼知道如果可以使用XPATH 2.0。我真的迷失在這裏。我看了看頁面,但沒有多大幫助。謝謝你的幫助。 – user357034

+0

@ user357034:XPath 2.0沒有.NET本機實現(並且SQL Server的XQuery實現是早期工作草案)。如果您使用的是兼容的XSLT 2.0或XQuery實現(例如Saxon 9.x(具有特殊的Saxon.NET版本)或XQSharp--尤其是.NET編寫的),那麼您也可以將XPath 2.0作爲它們的一部分。 –