dimkoul Δημοσ. 19 Ιουλίου 2012 Μέλος Δημοσ. 19 Ιουλίου 2012 Όχι δεν υπάρχει κανένα πρόβλημα. Αυτό που σε μπερδεύει είναι ότι δεν ξέρεις απο 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 στη πραξη αν και ξερω τις δυνατοτητες της.ωραια σε ευχαριστω πολυ!ξεκιναω διαβασμα
dimkoul Δημοσ. 19 Ιουλίου 2012 Μέλος Δημοσ. 19 Ιουλίου 2012 μπορεις να με βοηθησεις και σε κατι αλλο;το αρχειο πως το διαβαζω; με 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
παπι Δημοσ. 19 Ιουλίου 2012 Δημοσ. 19 Ιουλίου 2012 Πως ειναι το xml; (ενα paste) Ισως θα ηταν καλυτερο να κανεις xml serialization edit αλλαξε το single με first
dimkoul Δημοσ. 19 Ιουλίου 2012 Μέλος Δημοσ. 19 Ιουλίου 2012 Πως ειναι το 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>
defacer Δημοσ. 19 Ιουλίου 2012 Δημοσ. 19 Ιουλίου 2012 Νομίζω θέλει να ξεκινήσεις π.χ. με >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.
παπι Δημοσ. 19 Ιουλίου 2012 Δημοσ. 19 Ιουλίου 2012 Νομίζω θέλει να ξεκινήσεις π.χ. με >loaded.Descendants("Customer") λόγω του ότι ανάμεσα στο root element και τους <Customer> μεσολαβεί ένα <Customers>. Όπως και να 'χει, δίνε και το πλήρες μήνυμα του exception σε τέτοιες περιπτώσεις (exception.ToString()). Επίσης, τα XNames που δίνεις πρέπει να αντιστοιχούν στην XML σου πλήρως και είναι case-sensitive (στο πρώτο μου παράδειγμα θα παρατηρήσεις ότι είχα βάλει ακριβώς το ίδιο case με την XML που είχες δώσει εκεί). Το single σκαει, εχει δυο orders
defacer Δημοσ. 19 Ιουλίου 2012 Δημοσ. 19 Ιουλίου 2012 Το single σκαει, εχει δυο orders Μα δεν ασχολείται ακόμα με orders στον κώδικα που έδωσε...
παπι Δημοσ. 19 Ιουλίου 2012 Δημοσ. 19 Ιουλίου 2012 Μα δεν ασχολείται ακόμα με orders στον κώδικα που έδωσε... Μα σωστα
dimkoul Δημοσ. 19 Ιουλίου 2012 Μέλος Δημοσ. 19 Ιουλίου 2012 για τα ονοματα εχετε δικιο (case sensitive).οντως δεν εχω ασχοληθει ακομα με orders μεχρι να δω πως δουλευει το πιο απλο κομματι
παπι Δημοσ. 19 Ιουλίου 2012 Δημοσ. 19 Ιουλίου 2012 Ελα φιλε τι πηγα και βρηκα. xml to xsd to classes Γαματο!!! Μιλαμε με 3 κλικ
dimkoul Δημοσ. 20 Ιουλίου 2012 Μέλος Δημοσ. 20 Ιουλίου 2012 Ελα φιλε τι πηγα και βρηκα. xml to xsd to classes Γαματο!!! Μιλαμε με 3 κλικ μετα τη γραμμη var customers .... τι κανουμε;;
παπι Δημοσ. 20 Ιουλίου 2012 Δημοσ. 20 Ιουλίου 2012 μετα τη γραμμη 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>
dimkoul Δημοσ. 20 Ιουλίου 2012 Μέλος Δημοσ. 20 Ιουλίου 2012 Ξερω γω τι θες να κανεις. Το xsd σου φτιαχνει data classes οι οποιες γινονται serializable με καποιο συγκεκριμενο σχημα xml, δηλαδη σου φτιαχνει την class customer δεν εχω χρονο να το κανω ετσι-ασε που τις κλασεις και την ολη λειτουργικοτητα την εχω φτιαξει.μονο το να διαβαζω τα xml στην εκκινηση μου εχει μεινει.το exception που μου πεταει με LINQ ειναι "sequence contains no elements"
dimkoul Δημοσ. 29 Ιουλίου 2012 Μέλος Δημοσ. 29 Ιουλίου 2012 Το έλυσα το προβλημα με το 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.Πως μπορω να δώσω δικαίωμα στην εφαρμογη πανω στο φακελο αυτο ώστε να δημιουργει και να διαβαζει αρχεια;;
taazz Δημοσ. 30 Ιουλίου 2012 Δημοσ. 30 Ιουλίου 2012 χρησιμοποιήσε τον σωστό φάκελο και απόφηγε την χρήση του φακέλου της εφαρμογής http://en.wikipedia.org/wiki/Special_folder έχει κληδωθεί ο φάκελος program files στα vista και μετέπειτα λειτουργικά.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα