如何从 Soap Web Response 获取元素数据?网络

Jam*_*oll 1 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>
Run Code Online (Sandbox Code Playgroud)

我确定这已经被问过很多次了,但是我找不到一个简单的解决方案来从stockenquiryresult标签中获取值。

在 vbnet 中从 XML 中获取值

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

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

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

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

我在 ASP.NET 2.0 中使用 VB。

Cas*_*ins 5

有一些内置的 .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
Run Code Online (Sandbox Code Playgroud)

如果您选择使用 SelectSingleNode,MSDN 上XPath 文档将派用场。

使用 XmlReader

对于像读取一个标签一样快速的操作,您还可以使用 XmlReader(MSDN 文档)。与 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
Run Code Online (Sandbox Code Playgroud)