Tipul de cartografiere Complex prin intermediul LINQ XML

voturi
1

Am o listă de contacte în fișier XML.
Fiecare persoană de contact au câteva proprietăți și mdpr:connectionîn ea.
Conexiunea este obiect separat.
Am citit această listă și să obțină toate contactele la o listă cu proeprties standard , dar cum să asocieze această conexiune de opoziție.

<?xml version=1.0 encoding=UTF-8?>
<mdpr:Data xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance xmlns:mdpr=http://...>
<mdpr:contactList>
    <mdpr:contact ID={123456} classID=Customer>
      <mdpr:Name>data1</mdpr:Name>
      <mdpr:TransportCode>data2</mdpr:TransportCode>
      <mdpr:connection connectionIndex=0 fromID={12345} toID={123456}>
        <mdpr:status>1-5</mdpr:status>
        <mdpr:startDate>2012-03-13T10:23:00Z</mdpr:startDate>
        <mdpr:endDate>2013-03-13T13:44:00Z</mdpr:endDate>        
      </mdpr:connection>
    </mdpr:contact>
</mdpr:contactList>
...
Classes:
public class Contact
    {
        public string Name { get; set; }
        public string TransportCode { get; set; }
        public Connection Connection { get; set; }

        public TransportPlan()
        {
            this.Connection = new Connection();
        }
    }
public class Connection
    { 
        public string status{ get; set; }
        public string startDate{ get; set; }
        public string endDate { get; set; }
    }

Cod pentru a citi date:

XNamespace mdpr = http://...;
var contacts = from c in xdoc.Root.Element(mdpr + contactList)
                                  .Elements(mdpr + contact)
               select new Contact {
                   TransportCode = (string)c.Element(mdpr + TransportCode),
                   Name = (string)c.Element(mdpr + Name)
               };

Deci, întrebarea este cum să citească mdpr:connection?

Întrebat 13/08/2013 la 10:57
sursa de către utilizator
În alte limbi...                            


1 răspunsuri

voturi
2

Puteți accesa elementele direct prin adăugarea unui alt „.Element“. Am adăugat o variabilă pentru o mai bună lizibilitate.

var contacts = from c in xdoc.Element(mdpr + "Data")
                             .Element(mdpr + "contactList")
                             .Elements(mdpr + "contact")
               let contact = c
               let connection = contact.Element(mdpr + "connection")
               select new Contact
               {
                   TransportCode = (string)contact.Element(mdpr + "TransportCode"),
                   Name = (string)contact.Element(mdpr + "Name"),
                   Connection = new Connection
                   {
                       status = (string)connection.Element(mdpr + "status"),
                       startDate = (string) connection.Element(mdpr + "startDate"),
                       endDate = (string)connection.Element(mdpr + "endDate"),
                   },
               };

Dacă doriți să permiteți mai multe conexiuni (pentru a face scenariu mai complex)

public class Contact
{
    public string Name { get; set; }
    public string TransportCode { get; set; }
    public List<Connection> Connections { get; set; }
}

Cod pentru a analiza mai multe conexiuni

var contacts = from c in xdoc.Element(mdpr + "Data")
                             .Element(mdpr + "contactList")
                             .Elements(mdpr + "contact")
               let contact = c
               let connections = contact.Elements(mdpr + "connection")
               select new Contact
               {
                   TransportCode = (string)contact.Element(mdpr + "TransportCode"),
                   Name = (string)contact.Element(mdpr + "Name"),
                   Connections = connections.Select( connection => 
                       new Connection
                       {
                           status = (string)connection.Element(mdpr + "status"),
                           startDate = (string) connection.Element(mdpr + "startDate"),
                           endDate = (string)connection.Element(mdpr + "endDate"),
                       }).ToList(),
               };
Publicat 14/08/2013 la 07:37
sursa de către utilizator

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more