Перечисление Docusign XML C # LINQ не дало результатов

Я использую API Rest v2 на Docusign. Я возвращаю статус конверта для определенного envelopeId. Моя идея заключалась в том, чтобы вернуть данные в анонимную переменную, где каждый элемент в коллекции будет доступен индивидуально. Следующим шагом будет создание классов на C # для конкретных данных, которые мне нужны.

Но на самом деле все, что мне нужно, - это статус каждого из подписантов на конкретном конверте.

У меня проблемы с анализом следующего XML с помощью linq на C #. Основываясь на приведенном ниже XML, как мне построить свой запрос linq для возврата данных из XML? Я пробовал несколько разных вариантов кода linq, приведенного ниже, и ничего не работает.

Я получаю сообщение "Перечисление не дало результатов"

Я открыт для совершенно другого решения. Я просто пытаюсь отобразить текущий статус подписантов для данного envelopeeId.

Код C # ниже

            HttpWebResponse webResponse = (HttpWebResponse)request.GetResponse();
            StreamReader sr = new StreamReader(webResponse.GetResponseStream());

            XmlDocument xDoc = new XmlDocument();  

                var xdoc = XDocument.Load(sr);
            var units = from u in xdoc.Descendants("signers")
                        select new
                        {
                            eventTimestamp = (int)u.Element("eventTimestamp"),
                            status = (string)u.Element("status")
                        };

            foreach (var unit in units)
            {


                _alltext += "eventTimestamp = " + unit.eventTimestamp + " status = " + unit.status;

            }

Ниже приведен XML-ответ, который я получаю от Docusign.

    <recipients xmlns="http://www.docusign.com/restapi" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
  <agents>
    <carboncopies>
      <carboncopy>
        <note>
          <recipientid>3</recipientid>
          <recipientidguid>8efddbdb-7b2b-4ecf-8162-c61a74569bb3</recipientidguid>
          <requireidlookup>false</requireidlookup>
          <rolename>Imaging Mailbox</rolename>
          <routingorder>3</routingorder>
          <status>created</status>
          <templatelocked>true</templatelocked>
          <templaterequired>true</templaterequired>
          <userid>0950b93c-9e9f-4c09-9631-55a7c6316452</userid>
          <email>[email protected]</email>
          <name>Imaging Mailbox</name>
        </note>
      </carboncopy>
    </carboncopies>
    <certifieddeliveries>
      <currentroutingorder>1</currentroutingorder>
      <editors>
        <inpersonsigners>
          <intermediaries>
            <recipientcount>3</recipientcount>
            <signers>
              <signer>
                <note>
                  <recipientid>2</recipientid>
                  <recipientidguid>962a8552-c9f3-4715-b4ae-73d4e85dfbab</recipientidguid>
                  <requireidlookup>false</requireidlookup>
                  <rolename>Approval Queue</rolename>
                  <routingorder>2</routingorder>
                  <status>created</status>
                  <templatelocked>true</templatelocked>
                  <templaterequired>true</templaterequired>
                  <userid>e34d0005-8a19-494f-be6b-04b58f50254d</userid>
                  <email>[email protected]</email>
                  <name>Any Signer</name>
                  <tabs>
                    <approvetabs>
                      <approve>
                        <documentid>1</documentid>
                        <pagenumber>1</pagenumber>
                        <recipientid>2</recipientid>
                        <tabid>e1038387-cad5-4220-b279-6ac24e248ef5</tabid>
                        <xposition>473</xposition>
                        <yposition>88</yposition>
                        <font>arial</font>
                        <fontsize>size9</fontsize>
                        <tablabel>Approve 1</tablabel>
                        <buttontext>Approve</buttontext>
                        <height>22</height>
                        <width>54</width>
                      </approve>
                    </approvetabs>
                    <declinetabs>
                      <decline>
                        <documentid>1</documentid>
                        <pagenumber>1</pagenumber>
                        <recipientid>2</recipientid>
                        <tabid>4ed56261-b86a-4fc5-9a31-f72f2cac6b7a</tabid>
                        <xposition>472</xposition>
                        <yposition>116</yposition>
                        <font>arial</font>
                        <fontsize>size9</fontsize>
                        <tablabel>Decline 1</tablabel>
                        <buttontext>Decline</buttontext>
                        <declinereason>
                          <height>22</height>
                          <width>51</width>
                        </declinereason>
                      </decline>
                    </declinetabs>
                  </tabs>
                </note>
              </signer>
              <signer>
                <note>
                  <recipientid>1</recipientid>
                  <recipientidguid>2706d282-2145-48f2-a193-ca2af01da395</recipientidguid>
                  <requireidlookup>false</requireidlookup>
                  <rolename>Customer</rolename>
                  <routingorder>1</routingorder>
                  <status>sent</status>
                  <templatelocked>false</templatelocked>
                  <templaterequired>true</templaterequired>
                  <userid>68d684cb-75d7-4e6d-8182-42afbc075faa</userid>
                  <email>[email protected]</email>
                  <name>MARVIN HANSFORD</name>
                  <tabs>
                    <checkboxtabs>
                      <checkbox>
                        <documentid>1</documentid>
                        <pagenumber>1</pagenumber>
                        <recipientid>1</recipientid>
                        <tabid>2c538f0a-4cae-4188-b561-9274436d9405</tabid>
                        <xposition>111</xposition>
                        <yposition>300</yposition>
                        <locked>false</locked>
                        <required>false</required>
                        <name>Checkbox</name>
                        <requireinitialonsharedchange>false</requireinitialonsharedchange>
                        <selected>true</selected>
                        <shared>false</shared>
                        <tablabel>Check Box 5</tablabel>
                      </checkbox>
                      <checkbox>
                        <documentid>1</documentid>
                        <pagenumber>1</pagenumber>
                        <recipientid>1</recipientid>
                        <tabid>67a6c199-a194-410e-aab2-7be88b51a944</tabid>
                        <xposition>111</xposition>
                        <yposition>327</yposition>
                        <locked>false</locked>
                        <required>false</required>
                        <name>Checkbox</name>
                        <requireinitialonsharedchange>false</requireinitialonsharedchange>
                        <selected>true</selected>
                        <shared>false</shared>
                        <tablabel>Check Box 6</tablabel>
                      </checkbox>
                      <checkbox>
                        <documentid>1</documentid>
                        <pagenumber>1</pagenumber>
                        <recipientid>1</recipientid>
                        <tabid>68392379-c682-4874-90d8-22b5a4acac99</tabid>
                        <xposition>111</xposition>
                        <yposition>351</yposition>
                        <locked>false</locked>
                        <required>false</required>
                        <name>Checkbox</name>
                        <requireinitialonsharedchange>false</requireinitialonsharedchange>
                        <selected>true</selected>
                        <shared>false</shared>
                        <tablabel>Check Box 7</tablabel>
                      </checkbox>
                    </checkboxtabs>
                    <datesignedtabs>
                      <datesigned>
                        <documentid>1</documentid>
                        <pagenumber>2</pagenumber>
                        <recipientid>1</recipientid>
                        <tabid>c048b6cb-9122-458a-807d-e3464032f6a6</tabid>
                        <xposition>420</xposition>
                        <yposition>561</yposition>
                        <tablabel>Date Signed</tablabel>
                        <name>Date Signed</name>
                        <value></value>
                      </datesigned>
                    </datesignedtabs>
                    <fullnametabs>
                      <fullname>
                        <documentid>1</documentid>
                        <pagenumber>1</pagenumber>
                        <recipientid>1</recipientid>
                        <tabid>6221dc03-410a-4525-829b-28aa5c86e12c</tabid>
                        <xposition>185</xposition>
                        <yposition>177</yposition>
                        <tablabel>Full Name</tablabel>
                        <name>Full Name</name>
                      </fullname>
                    </fullnametabs>
                    <signheretabs>
                      <signhere>
                        <documentid>1</documentid>
                        <pagenumber>2</pagenumber>
                        <recipientid>1</recipientid>
                        <tabid>2fb6a368-94e0-44fa-8bdb-df45d4806870</tabid>
                        <xposition>135</xposition>
                        <yposition>518</yposition>
                        <name>Sign Here</name>
                        <optional>false</optional>
                        <scalevalue>1</scalevalue>
                        <tablabel>Signature 3</tablabel>
                      </signhere>
                    </signheretabs>
                    <texttabs>
                      <text>
                        <documentid>1</documentid>
                        <pagenumber>1</pagenumber>
                        <recipientid>1</recipientid>
                        <tabid>8e76581a-d189-4404-a3a0-4a7a5d34a296</tabid>
                        <xposition>184</xposition>
                        <yposition>195</yposition>
                        <font>arial</font>
                        <fontcolor>black</fontcolor>
                        <fontsize>size9</fontsize>
                        <tablabel>lblPolicyNumber</tablabel>
                        <concealvalueondocument>false</concealvalueondocument>
                        <disableautosize>false</disableautosize>
                        <locked>true</locked>
                        <maxlength>8</maxlength>
                        <name>Policy Number</name>
                        <required>false</required>
                        <value>7868169</value>
                        <width>60</width>
                        <requireinitialonsharedchange>false</requireinitialonsharedchange>
                        <shared>false</shared>
                        <validationmessage>
                          <validationpattern>
                            <height>22</height>
                            <ispaymentamount>false</ispaymentamount>
                          </validationpattern>
                        </validationmessage>
                      </text>
                      <text>
                        <documentid>1</documentid>
                        <pagenumber>2</pagenumber>
                        <recipientid>1</recipientid>
                        <tabid>431bdf22-8f3d-4afd-a4b7-6e68a8df3a02</tabid>
                        <xposition>23</xposition>
                        <yposition>750</yposition>
                        <font>arial</font>
                        <fontcolor>black</fontcolor>
                        <fontsize>size9</fontsize>
                        <tablabel>lblPolicyNumberBottom</tablabel>
                        <concealvalueondocument>false</concealvalueondocument>
                        <disableautosize>true</disableautosize>
                        <locked>true</locked>
                        <name>Policy Number</name>
                        <required>false</required>
                        <value>
                          <width>78</width>
                          <requireinitialonsharedchange>false</requireinitialonsharedchange>
                          <shared>false</shared>
                          <validationmessage>
                            <validationpattern>
                              <height>22</height>
                              <ispaymentamount>false</ispaymentamount>
                            </validationpattern>
                          </validationmessage>
                        </value>
                      </text>
                    </texttabs>
                  </tabs>
                </note>
              </signer>
            </signers>
          </intermediaries>
        </inpersonsigners>
      </editors>
    </certifieddeliveries>
  </agents>
</recipients>

person ejhost    schedule 18.11.2014    source источник
comment
Xml с отступом ... теперь ждем экспертной оценки..или OP   -  person MikeH    schedule 19.11.2014


Ответы (1)


Вы видели 9 пошаговых руководств по API, которые DocuSign предлагает в Центре разработчиков? Один из них специально разработан для получения статусов отдельных получателей в заданном конверте, а в примерах кода C # используется формат xml вместо json, поэтому вы можете использовать образец кода синтаксического анализа XML как есть.

В частности, пошаговое руководство по API, о котором я говорю, называется Получить статус получателя конверта, и его можно найти здесь:

http://iodocs.docusign.com/APIWalkthrough/getEnvelopeRecipientStatus

И это код синтаксического анализа XML, который использует образец ...

//////////////////////////////////////////////////////////////////////////////////////////////////
public static string parseDataFromResponse(string response, string searchToken)
{
    // look for "searchToken" in the response body and parse its value
    using (XmlReader reader = XmlReader.Create(new StringReader(response))) {
        while (reader.Read()) {
            if((reader.NodeType == XmlNodeType.Element) && (reader.Name == searchToken))
                return reader.ReadString();
        }
    }
    return null;
}
person Ergin    schedule 19.11.2014
comment
Спасибо, да, но я не думал об использовании этого метода в качестве отправной точки. Я отвечу вам после того, как немного изучу это решение. - person ejhost; 20.11.2014
comment
В итоге я основал свое решение на этом методе, но он уродлив. Мне не нравится, что мне приходится читать в потоке XML каждое поле, которое я ищу. Мне все еще интересно, почему linq to XML не возвращает никаких результатов - person ejhost; 21.11.2014
comment
Не уверен, я знаю DocuSign, но не очень знаком с LINQ. Надеюсь, кто-то, кто знает это больше, может дать пример ... - person Ergin; 22.11.2014