从SOAP消息中删除/提取SOAP头和主体

5 浏览
0 Comments

从SOAP消息中删除/提取SOAP头和主体

我有一个如下所示的SOAP消息。我想要获取仅请求元素及其子节点。



  
  
  
   
     .....
   
 

我可以使用以下代码来获取它。

Dim myXDocument As XDocument = XDocument.Load(New StringReader(Request))
Dim Xns As XNamespace = XNamespace.Get("http://mynamespace.com")
SoapBody = myXDocument.Descendants(Xns + "Request").First().ToString

但是我不想使用特定的名称,例如"Request",因为我有多个SOAP消息,每个消息都有不同的XML元素名称。所以我需要一个通用函数,而不是为每个消息创建一个特定的函数。

我按照以下建议进行了操作:Extract SOAP body from a SOAP message,但是下面的代码对我无效。我在哪里出错了,或者如何提取主体部分内部?

Dim myXDocument As XDocument = XDocument.Load(New StringReader(Request))
Dim Xns As XNamespace = XNamespace.Get("soap="http://www.w3.org/2003/05/soap-envelope")
SoapBody = myXDocument.Descendants(Xns + "Body").First().ToString

0
0 Comments

问题:从SOAP消息中移除/提取SOAP头和主体的原因以及解决方法。

在这个问题中,原因是第二个示例中的命名空间是错误的,并且没有完全按照链接答案中的示例进行操作。应该将传递给XNamespace.Get的参数设置为URI。

解决方法是将参数设置为正确的URI,然后使用FirstNode属性来获取Body元素的子元素。

具体的解决步骤如下:

1. 将命名空间设置为正确的URI,例如:XNamespace.Get("http://www.w3.org/2003/05/soap-envelope")

2. 使用Descendants方法和命名空间来获取Body元素,例如:myXDocument.Descendants(Xns + "Body")

3. 使用First方法获取第一个Body元素,例如:myXDocument.Descendants(Xns + "Body").First()

4. 使用FirstNode属性获取Body元素的子元素,例如:myXDocument.Descendants(Xns + "Body").First().FirstNode.ToString()

通过按照上述步骤操作,即可从SOAP消息中移除/提取SOAP头和主体。

注意:在VB.NET中,使用FirstNode属性时不需要括号。

0