在我提出这个问题之前,请注意我对VB(.net或其他)的了解非常有限,并且到目前为止已经通过许多互联网搜索实现了我的目标。
我目前正在调用一个返回基本XML的API(成功)。我目前将这个XML响应加载到XMLDocument中,其中XML看起来如下:
<?xml version="1.0" encoding="utf-8" ?>
<UniqueCouponResponse xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://api.website.co.uk/">
<LogId>ffffffff-dddd-9999-ffff-2faf432ea2bd</LogId>
<StatusId>0</StatusId>
<EntryId>99999999</EntryId>
<UserId>88888888</UserId>
<Coupon>AAAACouponCodeBBBB</Coupon>
<ExpiryDate>2017-09-26 23:59:59</ExpiryDate>
</UniqueCouponResponse>
在调试Visual Studio中的代码时,上面的示例是从XML查看器中复制的。 请注意,UniqueCouponResponse没有父元素,并且每次进行API调用时都只返回其中一个元素。
我需要的是将元素中的值(例如LogID和ExpiryDate)提取到专用字符串字段中,但是我遇到了空节点的问题,For Each会立即跳出而没有分配任何字符串。
我一直使用的代码如下:
Dim XMLDoc As New XmlDocument()
XMLDoc.LoadXml(responseFromServer)
Dim nodes As XmlNodeList = XMLDoc.DocumentElement.SelectNodes("/UniqueCouponResponse")
Dim strLogID As String = "", strEntryId As String = "", strCoupon As String = "", strExpiryDate As String = ""
For Each node As XmlNode In nodes
strLogID = node.SelectSingleNode("LogId").InnerText
strEntryId = node.SelectSingleNode("EntryId").InnerText
strCoupon = node.SelectSingleNode("Coupon").InnerText
strExpiryDate = node.SelectSingleNode("ExpiryDate").InnerText
Next
正如我所说,我不是VB。开发人员以任何方式形式或形式,因此会对我做错了什么以及如何提取这些价值观有所帮助或反馈。
提前致谢。
编辑:我已经指出了使用命名空间的正确方向,并且有以下适用于我的VB代码。
Dim XMLDoc As New XmlDocument()
XMLDoc.LoadXml(responseFromServer)
Dim xmlns As New XmlNamespaceManager(XMLDoc.NameTable)
xmlns.AddNamespace("dc", "http://api.website.co.uk/")
Dim nodes As XmlNodeList = XMLDoc.DocumentElement.SelectNodes("/dc:UniqueCouponResponse", xmlns)
For Each node As XmlNode In nodes
Dim strLogID = node.SelectSingleNode("dc:LogId", xmlns).InnerText
Dim strEntryId = node.SelectSingleNode("EntryId", xmlns).InnerText
Dim strCoupon = node.SelectSingleNode("Coupon", xmlns).InnerText
Dim strExpiryDate = node.SelectSingleNode("ExpiryDate", xmlns).InnerText
Next