【问题标题】:How to get element data from Soap Web Response? VB.NET如何从 Soap Web Response 获取元素数据? VB.NET
【发布时间】:2012-06-01 18:46:10
【问题描述】:

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

我已成功获得结果,但需要从中剥离所有 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 传递。

我正在使用带有 ASP.NET 2.0 的 VB。

【问题讨论】:

    标签: vb.net soap xml-parsing


    【解决方案1】:

    有一些内置的 .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
    

    【讨论】:

    • 谢谢,但我似乎无法让它工作。昨天我正在走这条线,但在尝试使用SelectSingleNode时总是得到Object reference not set to an instance of an object.
    • 抱歉,我忘记了 SelectSingleNode 需要 XPath 表达式。我为 XmlDocument 提供的原始代码只使用了元素名称而不是所需的 XPath 表达式,这就是您收到错误的原因。如果您不熟悉 XPath,它可能会很棘手。我更新了我对 XmlDocument 的回答以使用 LastChild 而不是 SelectSingleNode。如果您确定要检索的元素将始终是最后一个子元素,则可以正常工作。如果没有,您可以找出正确的 XPath 表达式以与 SelectSingleNode 一起使用。
    • 我对 XML 句号不是很熟悉!!谢谢,使用您的第一个示例,现在一切正常!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-17
    • 2016-11-17
    • 1970-01-01
    • 2021-08-27
    相关资源
    最近更新 更多