2016-08-09 105 views
0

我需要在C#中读取来自BizTalk服务的响应内容,该服务会发送一些名为diffgram的内容。我使用SoapUI来查看该服务正在响应。从BizTalk diffgram中读取XML响应

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> 
    <s:Body> 
     <ejecutaDqlResponse xmlns="http://tempuri.org/"> 
     <ejecutaDqlResult> 
      <xs:schema id="dql" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> 
       <xs:element name="dql" msdata:IsDataSet="true" msdata:UseCurrentLocale="true"> 
        <xs:complexType> 
        <xs:choice minOccurs="0" maxOccurs="unbounded"> 
         <xs:element name="Table1"> 
          <xs:complexType> 
           <xs:sequence> 
           <xs:element name="r_object_id" type="xs:string" minOccurs="0"/> 
           <xs:element name="n_tipo_docto" type="xs:string" minOccurs="0"/> 
           <xs:element name="n_fecha_celbrcn" type="xs:string" minOccurs="0"/> 
           </xs:sequence> 
          </xs:complexType> 
         </xs:element> 
        </xs:choice> 
        </xs:complexType> 
       </xs:element> 
      </xs:schema> 
      <diffgr:diffgram xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> 
       <dql xmlns=""> 
        <Table1 diffgr:id="Table11" msdata:rowOrder="0" diffgr:hasChanges="inserted"> 
        <r_object_id>0902c09e80109543</r_object_id> 
        <n_tipo_docto>Asambleas de Accionistas 1.- Acta</n_tipo_docto> 
        <n_fecha_celbrcn>1/1/2014 12:00:00 AM</n_fecha_celbrcn> 
        </Table1> 
        <Table1 diffgr:id="Table12" msdata:rowOrder="1" diffgr:hasChanges="inserted"> 
        <r_object_id>0902c09e8010a95a</r_object_id> 
        <n_tipo_docto>Asambleas de Accionistas Extraordinarias</n_tipo_docto> 
        <n_fecha_celbrcn>3/14/2015 12:00:00 AM</n_fecha_celbrcn> 
        </Table1> 
       </dql> 
      </diffgr:diffgram> 
     </ejecutaDqlResult> 
     </ejecutaDqlResponse> 
    </s:Body> 
</s:Envelope> 

我需要做的唯一的事情就是数不同r_object_id,在这个反应存在。但我无法弄清楚如何去做。我尝试了dataset.ReadXml,但没有奏效。

任何人都可以帮助我吗?

+0

您是否获得此响应,XML块或字符串(如图所示)? – tgolisch

+0

是的。我得到这个作为一个xmlblock,但是因为是biztalkservice,我进入我的c#代码的类是类型“ejecutaDqlResponse”。显示的字符串是即时通讯使用SOAP UI –

回答

0

尝试XML LINQ

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Xml; 
using System.Xml.Linq; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     const string FILENAME = @"c:\temp\test.xml"; 
     static void Main(string[] args) 
     { 
      XDocument doc = XDocument.Load(FILENAME); 
      XElement diffgram = doc.Descendants().Where(x => x.Name.LocalName == "diffgram").FirstOrDefault(); 
      var results = diffgram.Descendants("r_object_id").Select(x => new { 
       r_object_id = (string)x 
      }).ToList(); 
     } 
    } 
} 
+0

谢谢。由于响应是一个对象,我只是问了Any元素的属性数量。但是我会尝试你的回应。 –