2016-07-07 19 views
0

をXElementオブジェクトを起源:解析WSDLは、私はこのようなDTOクラスを持つC#DTOクラスに

class ProjekatDTO 
{ 
    private int idProjekta; 
    private string nazivProjekta; 
    private DateTime datumPocetkaRada; 
    private DateTime datumKrajaRada; 
    private decimal budzet; 
    private string opisProjekta; 
    private int aktivan; 
    private DateTime krajnjiRok; 
    private int uradjeno; 
    private string sef_projekta; 
    private string nadzor;... 

Classオブジェクトは、データ形式のWeb SOAPサーバが取り込まれることを意図しています。

SoapClient client = new SoapClient("http://somelink.someserver.net/~johndoe/gogogo/servis"); 
     XElement myEle = client.Invoke("getProjekti"); 

私はXElementオブジェクトを印刷すると、結果は次のとおりです:

<SOAP-ENV:Body xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> 
 
    <ns1:getProjektiResponse xmlns:ns1="http://somelink.someserver.net/~johndoe/gogogo/servis?ws=1"> 
 
    <return SOAP-ENC:arrayType="ns2:Map[3]" xsi:type="SOAP-ENC:Array" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"> 
 

 
<item xsi:type="ns2:Map"> 
 
     <item> 
 
      <key xsi:type="xsd:string">id</key> 
 
      <value xsi:type="xsd:string">53</value> 
 
     </item> 
 
     <item> 
 
      <key xsi:type="xsd:string">naziv</key> 
 
      <value xsi:type="xsd:string">projekat</value> 
 
     </item> 
 
     <item> 
 
      <key xsi:type="xsd:string">datum_pocetka_rada</key> 
 
      <value xsi:type="xsd:string">2016-07-07</value> 
 
     </item> 
 
     <item> 
 
      <key xsi:type="xsd:string">datum_kraja_rada</key> 
 
      <value xsi:type="xsd:string">2016-07-20</value> 
 
     </item> 
 
     <item> 
 
      <key xsi:type="xsd:string">budzet</key> 
 
      <value xsi:type="xsd:string">131313.00</value> 
 
     </item> 
 
     <item> 
 
      <key xsi:type="xsd:string">opis_projekta</key> 
 
      <value xsi:type="xsd:string">Opis projekta...</value> 
 
     </item> 
 
     <item> 
 
      <key xsi:type="xsd:string">aktivan</key> 
 
      <value xsi:type="xsd:string">1</value> 
 
     </item> 
 
     <item> 
 
      <key xsi:type="xsd:string">krajnji_rok</key> 
 
      <value xsi:type="xsd:string">2016-07-11</value> 
 
     </item> 
 
     <item> 
 
      <key xsi:type="xsd:string">uradjeno</key> 
 
      <value xsi:type="xsd:string">23</value> 
 
     </item> 
 
     <item> 
 
      <key xsi:type="xsd:string">postoji</key> 
 
      <value xsi:type="xsd:string">1</value> 
 
     </item> 
 
     <item> 
 
      <key xsi:type="xsd:string">sef_projekta</key> 
 
      <value xsi:type="xsd:string">12</value> 
 
     </item> 
 
     <item> 
 
      <key xsi:type="xsd:string">nadzor</key> 
 
      <value xsi:type="xsd:string">12</value> 
 
     </item> 
 
     </item> 
 
     <item xsi:type="ns2:Map"> 
 
     <item> 
 
      <key xsi:type="xsd:string">id</key> 
 
      <value xsi:type="xsd:string">54</value> 
 
     </item> 
 
     <item> 
 
      <key xsi:type="xsd:string">naziv</key> 
 
      <value xsi:type="xsd:string">drugi projekat</value> 
 
     </item> 
 
     <item> 
 
      <key xsi:type="xsd:string">datum_pocetka_rada</key> 
 
      <value xsi:type="xsd:string">2016-07-06</value> 
 
     </item> 
 
     <item> 
 
      <key xsi:type="xsd:string">datum_kraja_rada</key> 
 
      <value xsi:type="xsd:string">2016-07-29</value> 
 
     </item> 
 
     <item> 
 
      <key xsi:type="xsd:string">budzet</key> 
 
      <value xsi:type="xsd:string">13331.00</value> 
 
     </item> 
 
     <item> 
 
      <key xsi:type="xsd:string">opis_projekta</key> 
 
      <value xsi:type="xsd:string">opis drugog projekta</value> 
 
     </item> 
 
     <item> 
 
      <key xsi:type="xsd:string">aktivan</key> 
 
      <value xsi:type="xsd:string">1</value> 
 
     </item> 
 
     <item> 
 
      <key xsi:type="xsd:string">krajnji_rok</key> 
 
      <value xsi:type="xsd:string">2016-07-28</value> 
 
     </item> 
 
     <item> 
 
      <key xsi:type="xsd:string">uradjeno</key> 
 
      <value xsi:type="xsd:string">12</value> 
 
     </item> 
 
     <item> 
 
      <key xsi:type="xsd:string">postoji</key> 
 
      <value xsi:type="xsd:string">1</value> 
 
     </item> 
 
     <item> 
 
      <key xsi:type="xsd:string">sef_projekta</key> 
 
      <value xsi:type="xsd:string">12</value> 
 
     </item> 
 
     <item> 
 
      <key xsi:type="xsd:string">nadzor</key> 
 
      <value xsi:type="xsd:string">12</value> 
 
     </item> 
 
     </item> 
 
\t </return> 
 
    </ns1:getProjektiResponse> 
 
</SOAP-ENV:Body>

だから、それはマップのようなものです私はXElementオブジェクトの形式でデータを取得します。マップ "キー"は、ProjekatDTOクラスのProjekatDTOフィールド名に対応します。私が必要とするのは、適切な "値"を取得してProjekatDTOフィールドを設定することです。私はXMLを初めて使用していて、サンプルを検索しようとしましたが、見つけられなかったか、それを認識できませんでした。

答えて

0

はコード

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


namespace ConsoleApplication2 
{ 
    class Program 
    { 
     const string FILENAME = @"c:\temp\test.xml"; 
     static void Main(string[] args) 
     { 
      XDocument doc = XDocument.Load(FILENAME); 
      //more than one value per key 
      Dictionary<string, List<string>> dict1 = doc.Descendants("item").First().Elements("item") 
       .GroupBy(x => x.Element("key").Value, y => y.Element("value").Value) 
       .ToDictionary(x => x.Key, y => y.ToList()); 

      //one value per key 
      Dictionary<string, string> dict2 = doc.Descendants("item").First().Elements("item") 
       .GroupBy(x => x.Element("key").Value, y => y.Element("value").Value) 
       .ToDictionary(x => x.Key, y => y.FirstOrDefault()); 
     } 
    } 
} 
+0

を、次の試してみてくださいありがとうございました!それは私をたくさん助けました。あなたのコードでは、1つの「Projekat」アイテムの値を取得できました。何とか反復してすべてのアイテムを取得できました。あなたは私の一日を完全に救った;) – Gishas

関連する問題