mar_kostas13 Δημοσ. 21 Νοεμβρίου 2013 Δημοσ. 21 Νοεμβρίου 2013 Καλησπέρα,ο παρακάτω κώδικας είναι σε c# για Visual Studio και θέλω να κάνω read ta Attributes tou element date και εδώ κολλάω. 1ον τα έχω σωστά τα wright .??και 2ον αν ναι τότε πώς τα κάνω read.??? writer.WriteStartElement("Location"); writer.WriteString(textBox15.Text); writer.WriteEndElement();//RecordedBy writer.WriteStartElement("RecordedBy"); writer.WriteString(textBox2.Text); writer.WriteEndElement();//RecordedBy writer.WriteStartElement("Date"); writer.WriteAttributeString("Temperature", textBox11.Text); writer.WriteAttributeString("LightIntensity", textBox12.Text); writer.WriteString(textBox3.Text); writer.WriteEndElement();//DateΕυχαριστώ.
nucleus Δημοσ. 22 Νοεμβρίου 2013 Δημοσ. 22 Νοεμβρίου 2013 Ίσως να ήταν μια καλή ιδέα να βάλεις ένα δείγμα από το πως θες να είναι η δομή του xml αρχείου που θες να φτιάξεις αρχικά και να διαβάσεις αργότερα.
nucleus Δημοσ. 22 Νοεμβρίου 2013 Δημοσ. 22 Νοεμβρίου 2013 <?xml version="1.0" encoding="utf-8"?> <Root> <Location>textBox15.Text</Location> <RecordedBy>textBox2.Text</RecordedBy> <Date Temperature="textBox11.Text" LightIntensity="textBox12.Text">textBox3.Text</Date> </Root> Έχεις το Root η όπως αλλιώς είναι το όνομα του RootElement σου (Σημείωση:ΠΡΕΠΕΙ ΝΑ ΥΠΑΡΧΕΙ ΥΠΟΧΡΕΩΤΙΚΑ ΣΕ ΚΑΘΕ XML ΑΡΧΕΙΟ ΚΑΙ ΝΑ ΕΙΝΑΙ ΜΟΝΑΔΙΚΟ).Αν η μορφή που θες είναι αυτή καλώς αν όχι πρέπει να προσέξεις που κλείνεις τα Elements με την writer.WriteEndElement. Για να διαβάσεις το παραπάνω Xml δοκίμασε αυτό XmlReaderSettings rsettings = new XmlReaderSettings(); rsettings.ConformanceLevel = ConformanceLevel.Document; rsettings.CloseInput = true; using (XmlReader reader = XmlReader.Create("output.xml", rsettings)) { while (reader.Read()) { if (reader.IsStartElement()) { if (reader.IsEmptyElement) Console.WriteLine("<{0}/>", reader.Name); else { Console.Write("<{0}> ", reader.Name); if (reader.HasAttributes) { Console.WriteLine("Attributes of <" + reader.Name + ">"); while (reader.MoveToNextAttribute()) { Console.WriteLine(" {0}={1}", reader.Name, reader.Value); } // Move the reader back to the element node. reader.MoveToElement(); } reader.Read(); // Read the start tag. if (reader.IsStartElement()) // Handle nested elements. Console.Write("\r\n<{0}>", reader.Name); Console.WriteLine(reader.ReadString()); //Read the text content of the element. } } } } Χρησιμοποίησα XmlReader που διαβάζει από ένα output.xml Όσο ο Reader έχει δεδομένα while (reader.Read()) τότε αν διάβασε το tag που ξεκινά ένα element reader.IsStartElement() Ελέγχει αν είναι κενό Element <Location></Location> ή <Location /> πχ if (reader.IsEmptyElement) Console.WriteLine("<{0}/>", reader.Name); Αλλιώς κοιτάζει αν εχει attributes.Όσο η reader.MoveToNextAttribute() είναι true κοινώς όσο βρίσκει Attributes διαβάζει τις τιμές τους και το όνομα τους. if (reader.HasAttributes) { Console.WriteLine("Attributes of <" + reader.Name + ">"); while (reader.MoveToNextAttribute()) { Console.WriteLine(" {0}={1}", reader.Name, reader.Value); } // Move the reader back to the element node. reader.MoveToElement(); } Στο τέλος επιστρέφει το reader στο σημείο που ήταν πριν αρχίσει να διαβάζει τα attributes. Σημείωση: Ο κώδικας παραπάνω δουλεύει μόνο με ξεχωριστά elements όπως είναι στην μορφή που ανέφερα αρχικά.Αν το xml αρχείο σου περιέχει nested elements πχ <?xml version="1.0" encoding="utf-8"?> <Root> <Location> <RecordedBy>textBox2.Text</RecordedBy> <Date Temperature="textBox11.Text" LightIntensity="textBox12.Text">textBox3.Text</Date> </Location> </Root> δεν κάνει ελεγχο για το αν έχουν Attributes.Αφήνεται σαν άσκηση προς τον αναγνώστη το πως θα το κάνεις να δουλέψει και για nested elements. Βέβαια υπάρχει και η άμεση και σύντομη λύση,αν ξέρεις ποιο elements έχει τα attributes τότε με την reader.ReadToFollowing("Date"); string Temperature = reader.GetAttribute("Temperature"); string LightIntensity = reader.GetAttribute("LightIntensity"); Console.WriteLine("The Temperature value: " + Temperature); Console.WriteLine("The LightIntensity value: " + LightIntensity); Σεντονάκι βγήκε τελικά συγνώμη για αυτό.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα