基本上我有,看起來像這樣的XML文件:XPath的幫助,創建XPathNodeIterator確切
<?xml version="1.0" encoding="UTF-8"?>
<data>
<sender sndid="FT">
<val n="name">Oy Finntack Ltd</val>
<val n="address1">Keskikankaantie 29-31</val>
<val n="zipcode">15860</val>
<val n="city">Hollola</val>
<val n="country">FI</val>
<partner parid="POSTI">
<val n="iban">FI2515193000110201</val>
<val n="bic">NDEAFIHH</val>
<val n="postgiro">15193000110201</val>
<val n="custno">632368</val>
</partner>
</sender>
<receiver rcvid="109480">
<val n="name">Petra Kern</val>
<val n="address1">Ziegelgasse 14</val>
<val n="zipcode">73525</val>
<val n="city">Schwabisch Gmund</val>
<val n="country">DE</val>
</receiver>
<shipment orderno="635023">
<val n="reference"/>
<val n="from">FT</val>
<val n="to">109480</val>
<service srvid="IT14">
<addon adnid="mprc"/>
<val n="returnlabel">no</val>
</service>
<container measure="parcel" type="parcel">
<val n="reference">PCK00000160</val>
<val n="copies">1</val>
<val n="weight">0.3</val>
<val n="contents"/>
<val n="packagecode">pc</val>
<val n="marking">horze-finntack</val>
</container>
</shipment>
我寫一個Windows服務,在給定的時間間隔檢查XML文件的文件夾,這些數據隨後通過專有方法發送,以便進行評估,發貨和跟蹤,然後逐個解析它們以獲取某些特定信息(以解決地址和發貨內容)。所有這些代碼工作正常,我的問題是在VB .Net中訪問XML(我是一名PHP程序員,如果這是一個Web應用程序,可以在10分鐘內完成)。無論如何,這裏是一些代碼。這個Sub搜索Path
以Ext
結尾的所有文件,然後對於找到的每個文件將從XML文件中獲取某些信息並將其發送進行處理。
Sub GetXMLFiles()
//declare some variables
Dim fName As String
Dim Files = New ArrayList
Dim I As Integer = 1
Dim dirInfo As New DirectoryInfo(Path)
Dim fileInfos() As FileInfo = dirInfo.GetFiles(Ext)
For Each file_info As FileInfo In fileInfos
fName = file_info.FullName
Try
Dim xDoc As XPathDocument = New XPathDocument(fName)
Dim xNav As XPathNavigator = xDoc.CreateNavigator()
//from here until the end of this Try statement is just a test.
Dim sender As XPathNodeIterator
sender = xNav.Select("/data/sender")
While (sender.MoveNext())
Console.WriteLine(sender.Current.Value)
End While
//end test
Catch ex As Exception
End Try
Files.Add(Path & fName)
Next file_info
End Sub
在端,這將是有螺紋的,作爲XML結果將通過REST,它需要處理每個請求是不確定的時間被髮送。
所以這裏是我的問題/問題。在創建導航器之後,我可以像測試中一樣使用XPath表達式來選擇某個節點。但是在選擇該節點後,我無法通過名稱訪問其子節點。如果您注意到XML的<sender>
元素的屬性沒有正確命名,它們是<val n="name">
我需要返回的是每個<val>
,它是<sender>
的直接子元素(<partner>
部分爲我的目的省略)。這同樣適用於<receiver>
元素。 <shipment>
元素可能包含多個<container>
元素,但我可以處理一次,我可以找出如何正確地返回所有內容。我在<sender>
中的每個<val>
需要的是n="[NAME]"
和實際值<val>
。
如果您所提供的XML的<sender>
塊先看<val>
我想一個有兩個變量Name
和Value
,對於第一個例子是name
,Oy FinnTack Ltd
。
我知道我很接近!很抱歉,這篇文章很長,但我試圖回答很多關於stackoverflow的問題,這些人對他們正在做的事情非常模糊。
謝謝,我弄明白了(最後有點不同,我不知道關於Console.WriteLine的RegEx樣式解析,但我確實使用了GetAttribute(「n」,「」)來獲取n屬性。Str ing.Empty雖然更好,謝謝!現在我唯一的問題是像一個關聯數組一樣處理集合......但這是另一個故事,謝謝! – 2012-02-07 17:07:20
如果您正在使用「集合」,但需要關聯數組的功能,是否嘗試過「Dictionary」? – LiquidPony 2012-02-07 17:28:03