如果您能够(或愿意)使用它,使用LINQ to XML非常容易。
' XDocument.Parse will load XML from a string
' Use XDocument.Load to load it from a file
Dim xDoc As XDocument = XDocument.Parse(xmlString)
Dim salesID = (From x In xDoc.Descendants("ReturnItem")
Where x.Element("DataName").Value = "SaleID"
Select x.Element("DataValue").Value).FirstOrDefault()
上面的代码片段首先在xDoc
.
接下来,它在以 SalesID 作为值的“DataName”元素上对其进行过滤。
然后它选择相应的“DataValue”元素的值。
FirstOrDefault
返回匹配的第一个元素(如果没有找到,则返回默认值)。没有FirstOrDefault()
您将获得一组匹配的结果,然后您可以遍历这些结果。
上面是一个非常简单的例子,但是 LINQ to XML 非常强大,在处理 XML 时我更喜欢它。
编辑添加非 LINQ 方法
XmlDocument
这是使用和XPath 语法执行上述操作的方法:
Dim xmlDoc As New XmlDocument()
' Use LoadXML to load from a string; if from a file use Load
xmlDoc.LoadXml(xmlString)
Dim SaleID As String
Dim ReturnItems As XmlNodeList = xmlDoc.SelectNodes("/WebResult/ReturnItems/ReturnItem")
For Each Item As XmlNode In ReturnItems
If Item.SelectSingleNode("DataName").InnerText = "SaleID" Then
SaleID = Item.SelectSingleNode("DataValue").InnerText
End If
Next
上面的代码片段将 XML 字符串加载到XmlDocument
. 然后,它选择与 XPath 表达式“/WebResult/ReturnItems/ReturnItem”匹配的所有节点(即,它获取所有 ReturnItem 节点及其子节点)。
接下来,它遍历集合,并且对于每个 ReturnItem 节点,它检查 DataName 节点是否等于“SaleID”,如果是,则将 DataValue 节点的值分配给SaleID
字符串。
这又是一个微不足道的例子。如果您在 XML 中有多个“SaleID”节点,则需要将值放在列表或其他集合中,否则上面的代码只会给您最后一个。
XPath 非常强大,并且对 XML 和 XPath 的丰富支持自 1.0 以来一直是 .NET Framework 的一部分。
这里的好处是,如果消息的格式发生变化,您只需要更新 XPath 查询,而不是弄清楚如何解析新格式。