使用VB.NET循环遍历XML文件

6
我有一个处理XML文件的问题。我想通过VB.NET循环遍历该文件,并提取OrderID元素的所有值。
<?xml version="1.0"?>
<ListOrdersResponse xmlns="https://xxx.xxxxxx.com/Orders/999uuu777">
  <ListOrdersResult>
    <NextToken>XXXXXXXXXX</NextToken>
    <Orders>
      <Order>
        <ShipmentServiceLevelCategory>Standard</ShipmentServiceLevelCategory>
        <OrderId>ooooooooo</OrderId>
      </Order>
      <Order>
        <ShipmentServiceLevelCategory>Standard</ShipmentServiceLevelCategory>
        <OrderId>ujuujujuj</OrderId>
      </Order>
      </Orders>
    <CreatedBefore>2013-06-19T09:10:47Z</CreatedBefore>
  </ListOrdersResult>
  <ResponseMetadata>
    <RequestId>8e34f7d9-3af7-4490-801b-cccc7777yu</RequestId>
  </ResponseMetadata>
</ListOrdersResponse>

这是我尝试的代码,但它并没有循环遍历每个订单。

Dim doc As New XmlDocument()
doc.Load(file)
Dim nodelist As XmlNodeList = doc.SelectNodes(".//Orders/Order")
For Each node As XmlElement In nodelist
   console.writeline(node.SelectSingleNode("OrderID").InnerText)
Next

非常感谢您的帮助。

2个回答

13

试试这个:

doc.Load(file)
nodelist = doc.GetElementsByTagName("Order")

For Each node As XmlElement In nodelist
   Console.Writeline(node("OrderID").InnerText)
Next

2

我运行的 xPath 表达式获取了这两个订单,如下://tns:Order

Dim doc As New XmlDocument()
doc.Load(file)
Dim nodelist As XmlNodeList = doc.SelectNodes("//tns:Order")
For Each node As XmlElement In nodelist
  '2 exist
Next

谢谢您的回复。如果我将“.//Orders/Order”替换为“//tns:Order”,我会得到一个异常。您能解释一下//tns:路径是什么吗? - user2516387
抱歉,忘记附加异常信息了。需要命名空间管理器或XsltContext。此查询具有前缀、变量或用户定义的函数。 - user2516387
@user2516387 - tns 只是 DonA 在创建示例程序时使用的 XML 命名空间别名。您可以将其删除。 - JDB
如果我使用“//Order”,它无法处理for...next循环,即返回0个节点。 - user2516387
这就是LiquidXML想出来的路径。我觉得很奇怪,因为我记得过去使用过//Order - OneFineDay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接