LINQ Query使用C#从SOAP Envelope检索数据

时间:2015-03-24 14:21:54

标签: c# linq web-services soap

我正在尝试针对Web服务调用SOAP调用,并检索记录。我能够检索名称空间为b的记录。但是无法进一步从命名空间c或d中检索。在下面的例子中,我创建了一个XDocument,它是一个SOAP信封。这是从Web服务调用方法或函数。这会产生多个记录。我想要显示城市和州以及姓名。

<s:Envelope>
    <s:Header>
        <h:MessageHeader></h:MessageHeader>             
    </s:Header>
    <s:Body>

    <a:Name>ABC</a:AccountName>
    <a:Value xmlns:b='http://'>
        <b:Address xmlns:c='http://'>
            <c:City>Mumbai</c:City>
            <c:CountryCode i:nil='true'/>
            <c:County i:nil='true'/>
            <c:StateOrProvinceCode>MH</c:StateOrProvinceCode>
            <c:Street1>120 ABCD</c:Street1>
            <c:Street2 i:nil='true'/>
            <c:ZipOrPostalCode i:nil='true'/>
        </b:Address>
    </s:Body>
</s:Envelope>

我正在尝试调用函数来检索与名称匹配的客户端。所以我添加了循环,通过它我可以拥有客户端中每个客户端的名称,地址。我能够为每个客户检索一个名称,但不能显示城市和州。请寻求帮助。

var doc = XDocument.parse(result.content.ReadAsStringAsunc().Result);

//retrieving all client     
var clients = from c in doc.Element(s+"Envelope")
    .Elements(s+"Body")
    .Element(e+"Get_Eesponse")
    .Element(e+"Get_Result")
    .Element(b+"Client")
select new
{
    Name = (string)c.Element(b+"Name"),
    //want to retrieve a city and state
    Address = from p in c.Element(b+"Value") where p.element("city") != null select p
};
clients.Dump(); // I am trying all to display list here

1 个答案:

答案 0 :(得分:0)

应该这样:

.Element(e+"Get_Eesponse")

是这样的:

.Element(e+"Get_Response")

而不是:

p.element("city")

应该是这样的:

p.Element(c+"City")