如何从Soap Web Response获取元素数据? VB.NET

时间:2012-06-01 18:46:10

标签: vb.net soap xml-parsing

我正在尝试从网络服务获取数据,只返回一个结果,即库存中给定商品的数量。

我成功获得了一个结果,但需要从中删除所有XML代码以简单地返回数字,返回的XML如下所示:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <stockenquiryResponse xmlns="https://webservices.electrovision.co.uk">
      <stockenquiryResult>**THE NUMBER I NEED**</stockenquiryResult>
    </stockenquiryResponse>
  </soap:Body>
</soap:Envelope>

我确信已多次询问此问题,但我无法找到一个简单的解决方案来获取stockenquiryresult代码中的值。

get value from XML in vbnet

似乎是正确的答案,但我无法让它发挥作用。

如果有帮助,我会使用以下示例获取数据:

http://msdn.microsoft.com/en-us/library/debx8sh9(v=vs.80).aspx

只需进行一些调整即可正确获取数据,最显着的是将内容类型更改为application/soap+xml并将数据作为XML传递。

我在VB 2.0中使用VB。

1 个答案:

答案 0 :(得分:3)

您可以使用一些内置的.NET类来读取XML。

使用XmlDocument

XmlDocument公开您在DOM(文档对象模型)中从Web服务检索的XML字符串。您可以在MSDN上阅读有关XmlDocument的内容。

Dim XMLDoc as new XMLDocument

XMLDoc.LoadXML(XMLString)

Dim Result as string = XMLDoc.LastChild.InnerText

'Alternatively, you can use SelectSingleNode.
'You will need to determine the correct XPath expression.
'Dim Result as string = XMLDoc.SelectSingleNode("XPathToNode").InnerText

如果您选择使用SelectSingleNode,XPath documentation on MSDN会派上用场。

使用XmlReader

对于像读取一个标签一样快的东西,您也可以使用XmlReader(MSDN Documentation)。与XmlDocument不同,XmlReader不会将XML公开为DOM.XmlReader是一个前向读取器,但应该更快,比XmlDocument更轻量级。这适用于像你这样的情况。

Dim XSettings as new XmlReaderSettings
'You can use XSettings to set specific settings on the XmlReader below.
'See linked docs.

Using SReader as New StringReader(XMLString)

    Dim X as XmlReader = XmlReader.Create(SReader, XSettings)
    X.ReadToDescendant("stockenquiryResult")
    Dim Result as string = X.ReadElementContentAsString

End Using