Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Όχι δεν υπάρχει κανένα πρόβλημα. Αυτό που σε μπερδεύει είναι ότι δεν ξέρεις απο LINQ αν κατάλαβα καλά. Μάθε, είναι το καλύτερο δώρο που μπορείς να κάνεις στον εαυτό σου σαν προγραμματιστής C# (δεν υπερβάλλω ούτε στο ελάχιστο!). Στην πορεία θα δεις ότι δεν υπάρχει κανένα θέμα.

 

Για τα orders θα κάνεις πάλι άλλο projection:

 

>var customers = root.Elements().Select(c => new Customer {
   Name = c.Elements("name").Single().Value,
   Surname = c.Elements("surname").Single().Value,
   Orders = c.Elements("order").Select(o => new Order {
       // κλπ κλπ
   }).ToList(),
}).ToList();

ναι δεν εχω ξανακοιταξει Linq στη πραξη αν και ξερω τις δυνατοτητες της.ωραια σε ευχαριστω πολυ!ξεκιναω διαβασμα

  • Απαντ. 30
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

Συχνή συμμετοχή στο θέμα

Δημοσιευμένες Εικόνες

Δημοσ.

μπορεις να με βοηθησεις και σε κατι αλλο;το αρχειο πως το διαβαζω; με XDocument.load(name.xml); ?και επισης πρεπει να ορισω ολα τα tags;δηλαδη και το <customers>.εβαλα μονο αυτο :

>XDocument loaded = XDocument.Load("data.xml");
           var customers = loaded.Elements().Select(c => new customer
           {
               name = c.Elements("name").Single().Value,
               surname = c.Elements("surname").Single().Value,
               address = c.Elements("address").Single().Value,
               tel1 = c.Elements("tel1").Single().Value,
               tel2 = c.Elements("tel2").Single().Value,
               id = c.Elements("id").Single().Value
            
           }).ToList();

και μου πεταει InvalidOperationException

Δημοσ.

Πως ειναι το xml; (ενα paste) Ισως θα ηταν καλυτερο να κανεις xml serialization

 

edit αλλαξε το single με first

>
<?xml version="1.0" encoding="utf-8"?>
<Customers>
  <Customer>
      <ID>1</ID>
      <Surname>dimitris</Surname>
      <Name>dimitris</Name>
      <Address>patision 12</Address>
      <Tel1>6999999</Tel1>
      <Tel2>21000000</Tel2>
      <Order>
         <OrderId>0</OrderId>
         <OrderName>proion1</OrderName>
         <OrderInfo>mavro xroma</OrderInfo>
      </Order>
      <Order>
         <OrderId>1</OrderId>
         <OrderName>proion2</OrderName>
         <OrderInfo>extra info</OrderInfo>
      </Order>
 </Customer>
</Customers>

Δημοσ.

Νομίζω θέλει να ξεκινήσεις π.χ. με

 

>loaded.Descendants("Customer")

 

λόγω του ότι ανάμεσα στο root element και τους <Customer> μεσολαβεί ένα <Customers>.

 

Όπως και να 'χει, δίνε και το πλήρες μήνυμα του exception σε τέτοιες περιπτώσεις (exception.ToString()).

 

Επίσης, τα XNames που δίνεις πρέπει να αντιστοιχούν στην XML σου πλήρως και είναι case-sensitive (στο πρώτο μου παράδειγμα θα παρατηρήσεις ότι είχα βάλει ακριβώς το ίδιο case με την XML που είχες δώσει εκεί).

 

Και τέλος η Single() δεν είναι μαγικό ραβδί, παίζει ρόλο και η αναμενόμενη δομή της XML σου. Δες λίγο στο MSDN τις μεθόδους Enumerable.Single, Enumerable.SingleOrDefault και αντίστοιχα Enumerable.First και Enumerable.FirstOrDefault.

Δημοσ.

Νομίζω θέλει να ξεκινήσεις π.χ. με

 

>loaded.Descendants("Customer")

 

λόγω του ότι ανάμεσα στο root element και τους <Customer> μεσολαβεί ένα <Customers>.

 

Όπως και να 'χει, δίνε και το πλήρες μήνυμα του exception σε τέτοιες περιπτώσεις (exception.ToString()).

 

Επίσης, τα XNames που δίνεις πρέπει να αντιστοιχούν στην XML σου πλήρως και είναι case-sensitive (στο πρώτο μου παράδειγμα θα παρατηρήσεις ότι είχα βάλει ακριβώς το ίδιο case με την XML που είχες δώσει εκεί).

 

Το single σκαει, εχει δυο orders

Δημοσ.

για τα ονοματα εχετε δικιο (case sensitive).οντως δεν εχω ασχοληθει ακομα με orders μεχρι να δω πως δουλευει το πιο απλο κομματι

Δημοσ.

Ελα φιλε τι πηγα και βρηκα. xml to xsd to classes grin.png Γαματο!!!

 

Μιλαμε με 3 κλικ

post-216584-0-03872900-1342711679_thumb.jpg

μετα τη γραμμη var customers .... τι κανουμε;;

Δημοσ.

μετα τη γραμμη var customers .... τι κανουμε;;

 

Ξερω γω τι θες να κανεις.

Το xsd σου φτιαχνει data classes οι οποιες γινονται serializable με καποιο συγκεκριμενο σχημα xml, δηλαδη σου φτιαχνει την class customer

 

πχ

>namespace ConsoleApplication2
{
   class Program
   {
       static void Main(string[] args)
       {
           XmlSerializer reader = new XmlSerializer(typeof(Customers));
           var customers = reader.Deserialize(File.Open("test.xml", FileMode.Open)) as Customers;
           foreach (var customer in customers.Items)
           {
               Console.WriteLine(
                   "ID:{0}\nName:{1}\nSurname:{2}\nTel1:{3}",
                   customer.ID,
                   customer.Name,
                   customer.Surname,
                   customer.Tel1);
               foreach (var order in customer.Order)
               {
                   Console.WriteLine("OrderID:{0}\nOrderInfo:{1}\n",
                       order.OrderId,order.OrderInfo);
               }
           }




           Console.WriteLine();
       }
   }
}

 

εχει output

>ID:1
Name:dimitris
Surname:dimitris
Tel1:6999999
OrderID:0
OrderInfo:mavro xroma

OrderID:1
OrderInfo:extra info

 

 

εδω οι κλασεις

 

 

>//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by a tool.
//     Runtime Version:4.0.30319.1
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

using System.Xml.Serialization;

// 
// This source code was auto-generated by xsd, Version=4.0.30319.1.
// 


/// <remarks/>
[system.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")]
[system.SerializableAttribute()]
[system.Diagnostics.DebuggerStepThroughAttribute()]
[system.ComponentModel.DesignerCategoryAttribute("code")]
[system.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
[system.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)]
public partial class Customers {
   
   private CustomersCustomer[] itemsField;
   
   /// <remarks/>
   [system.Xml.Serialization.XmlElementAttribute("Customer", Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
   public CustomersCustomer[] Items {
       get {
           return this.itemsField;
       }
       set {
           this.itemsField = value;
       }
   }
}

/// <remarks/>
[system.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")]
[system.SerializableAttribute()]
[system.Diagnostics.DebuggerStepThroughAttribute()]
[system.ComponentModel.DesignerCategoryAttribute("code")]
[system.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
public partial class CustomersCustomer {
   
   private string idField;
   
   private string surnameField;
   
   private string nameField;
   
   private string addressField;
   
   private string tel1Field;
   
   private string tel2Field;
   
   private CustomersCustomerOrder[] orderField;
   
   /// <remarks/>
   [system.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
   public string ID {
       get {
           return this.idField;
       }
       set {
           this.idField = value;
       }
   }
   
   /// <remarks/>
   [system.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
   public string Surname {
       get {
           return this.surnameField;
       }
       set {
           this.surnameField = value;
       }
   }
   
   /// <remarks/>
   [system.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
   public string Name {
       get {
           return this.nameField;
       }
       set {
           this.nameField = value;
       }
   }
   
   /// <remarks/>
   [system.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
   public string Address {
       get {
           return this.addressField;
       }
       set {
           this.addressField = value;
       }
   }
   
   /// <remarks/>
   [system.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
   public string Tel1 {
       get {
           return this.tel1Field;
       }
       set {
           this.tel1Field = value;
       }
   }
   
   /// <remarks/>
   [system.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
   public string Tel2 {
       get {
           return this.tel2Field;
       }
       set {
           this.tel2Field = value;
       }
   }
   
   /// <remarks/>
   [system.Xml.Serialization.XmlElementAttribute("Order", Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
   public CustomersCustomerOrder[] Order {
       get {
           return this.orderField;
       }
       set {
           this.orderField = value;
       }
   }
}

/// <remarks/>
[system.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")]
[system.SerializableAttribute()]
[system.Diagnostics.DebuggerStepThroughAttribute()]
[system.ComponentModel.DesignerCategoryAttribute("code")]
[system.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
public partial class CustomersCustomerOrder {
   
   private string orderIdField;
   
   private string orderNameField;
   
   private string orderInfoField;
   
   /// <remarks/>
   [system.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
   public string OrderId {
       get {
           return this.orderIdField;
       }
       set {
           this.orderIdField = value;
       }
   }
   
   /// <remarks/>
   [system.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
   public string OrderName {
       get {
           return this.orderNameField;
       }
       set {
           this.orderNameField = value;
       }
   }
   
   /// <remarks/>
   [system.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
   public string OrderInfo {
       get {
           return this.orderInfoField;
       }
       set {
           this.orderInfoField = value;
       }
   }
}

 

 

 

 

Για να τις φτιαξεις πας στο prompt του visual studio (εκει στα tools)

αλλαζεις φακελο (cd) και πας εκει που ειναι το xml

πατας xsd name.xml /d σου βγαζει το name.xsd

μετα πατας xsd name.xsd /c και σου βγαζει τις classes

 

>Setting environment for using Microsoft Visual Studio 2010 x86 tools.

E:\Program Files\Microsoft Visual Studio 10.0\VC>cd "E:\Users\papi\Desktop\xml d
eserialization"

E:\Users\papi\Desktop\xml deserialization>xsd test.xml /d
Microsoft (R) Xml Schemas/DataTypes support utility
[Microsoft (R) .NET Framework, Version 4.0.30319.1]
Copyright (C) Microsoft Corporation. All rights reserved.
Writing file 'E:\Users\papi\Desktop\xml deserialization\test.xsd'.

E:\Users\papi\Desktop\xml deserialization>xsd test.xsd /c
Microsoft (R) Xml Schemas/DataTypes support utility
[Microsoft (R) .NET Framework, Version 4.0.30319.1]
Copyright (C) Microsoft Corporation. All rights reserved.
Writing file 'E:\Users\papi\Desktop\xml deserialization\test.cs'.

E:\Users\papi\Desktop\xml deserialization>

 

Δημοσ.

Ξερω γω τι θες να κανεις.

Το xsd σου φτιαχνει data classes οι οποιες γινονται serializable με καποιο συγκεκριμενο σχημα xml, δηλαδη σου φτιαχνει την class customer

δεν εχω χρονο να το κανω ετσι-ασε που τις κλασεις και την ολη λειτουργικοτητα την εχω φτιαξει.μονο το να διαβαζω τα xml στην εκκινηση μου εχει μεινει.το exception που μου πεταει με LINQ ειναι "sequence contains no elements"

  • 2 εβδομάδες αργότερα...
Δημοσ.

Το έλυσα το προβλημα με το xml.έχω φτιάξει και το setup file.Το πρόβλημα μου τωρα ειναι το εξης.το κανω εγκατασταση και οταν είναι να μου γραψει το xml μου βγαζει αυτό το μήνυμα : "Unhandled exception has occured in your application... Access to the path: "C:\Program Files (x86)\company\name\data.xml" is denied" και στα details "See the end of this message for details on invoking

just-in-time (JIT) debugging instead of this dialog box." μαζι με άλλα για το exception.Πως μπορω να δώσω δικαίωμα στην εφαρμογη πανω στο φακελο αυτο ώστε να δημιουργει και να διαβαζει αρχεια;;

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα

  • Δημιουργία νέου...