基本上我有,看起来像这样的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