Harkon Δημοσ. 24 Μαρτίου 2009 Δημοσ. 24 Μαρτίου 2009 καλημέρα σας μάλλον κουράστηκαν τα μάτια μου και δεν βλέπω κάτι απλό - λογικά προσπαθώ να κάνω επανάληψη σε ένα XmlNodeList παίρνοντας ένα ένα Node. Ο παρακάτω κώδικας αποθηκεύει στην βάση πάντα το ίδιο node (στο πλήθος είμαι οκ - δηλαδή αν είναι 10, θα κάνει 10 εγγραφές αλλά θα έχουν ίδια στοιχεία), μπορεί κάποιος να μου βρει το γιατί; Ευχαριστώ > XmlNodeList nodes; XmlNode node; nodes = doc.SelectNodes("/rss/channel/item"); foreach(XmlNode nodeX in nodes) { builder = new StringBuilder(); builder.Append("INSERT INTO RSSLines(title,link,description"); builder.Append(",author,category,comments,enclosure,guid,pubDate,source) VALUES("); #region Lines node = nodeX.SelectSingleNode("//rss/channel/item/title"); if (node == null) { builder.Append("null"); } else { tmp = node.InnerText.Replace("'", "''"); builder.Append("'" + tmp + "'"); } node = nodeX.SelectSingleNode("//rss/channel/item/link"); if (node == null) { builder.Append(",null"); } else { tmp = node.InnerText.Replace("'", "''"); builder.Append(",'" + tmp + "'"); } node = nodeX.SelectSingleNode("//rss/channel/item/description"); if (node == null) { builder.Append(",null"); } else { tmp = node.InnerText.Replace("'", "''"); builder.Append(",'" + tmp + "'"); } node = nodeX.SelectSingleNode("//rss/channel/item/author"); if (node == null) { builder.Append(",null"); } else { tmp = node.InnerText.Replace("'", "''"); builder.Append(",'" + tmp + "'"); } node = nodeX.SelectSingleNode("//rss/channel/item/comments"); if (node == null) { builder.Append(",null"); } else { tmp = node.InnerText.Replace("'", "''"); builder.Append(",'" + tmp + "'"); } node = nodeX.SelectSingleNode("//rss/channel/item/pubDate"); if (node == null) { builder.Append(",null"); } else { tmp = node.InnerText.Replace("'", "''"); tmp = String.Format("{0:yyyy-MM-dd HH:mm:ss}", Convert.ToDateTime(tmp)); builder.Append(",'" + tmp + "'"); } builder.Append(")"); x = builder.ToString(); mySqlCommand = MyConnection.CreateCommand(); mySqlCommand.CommandText = x.ToString(); mySqlCommand.ExecuteNonQuery(); }//end foreach
macabre_sunsets Δημοσ. 24 Μαρτίου 2009 Δημοσ. 24 Μαρτίου 2009 Χωρίς να είμαι σίγουρος, νομίζω πως το "builder = new StringBuilder();" που έχεις μέσα στο foreach φταίει που βάζει πάντα τα ίδια δεδομένα. Έχεις δοκιμάσει να το βγάλεις έξω από την loop και απλά στο τέλος της να του δίνεις κάποια null τιμή για να μην έχει απομεινάρια?
Harkon Δημοσ. 24 Μαρτίου 2009 Μέλος Δημοσ. 24 Μαρτίου 2009 χμμ να πω την αληθεια δεν βρήκα πως "καθαρίζει" και υπέθεσα πως αν το αρχικοποιώ κάθε φορά θα είναι σαν καινούριο θα το δοκιμάσω και θα επανέλθω, ευχαριστώ πολύ!
macabre_sunsets Δημοσ. 24 Μαρτίου 2009 Δημοσ. 24 Μαρτίου 2009 I think the easiest way is to set StringBuilder.Length to 0. Διάβασα αυτό για να καθαρίζεις το StringBuilder. Τώρα αμα παίζει σωστά δεν ξέρω.
Harkon Δημοσ. 24 Μαρτίου 2009 Μέλος Δημοσ. 24 Μαρτίου 2009 ααα πολύ καλό ευχαριστώ ρε συ να σαι καλα! θα το δω οταν γυρισω σπιτι κ θα σου πω ευχαριστω κ παλι!
Evgenios1 Δημοσ. 24 Μαρτίου 2009 Δημοσ. 24 Μαρτίου 2009 Το xml εχει στανταρ tags ? Γιατι αν εχει μπορεις απλος να το σειριοποιησεις
Harkon Δημοσ. 24 Μαρτίου 2009 Μέλος Δημοσ. 24 Μαρτίου 2009 rss είναι, οπότε έχει σίγουρα κάποια στανταρ elements και κάποια άλλα που μπορει να υπάρχουν, μπορεί και όχι αυτό που κάνω είναι η αποθήκευση δεδομένων από rss σε πίνακες sqlsrv τι εννοείς με την σειριοποίηση όμως, δεν την έχω ψάξει καθόλου. τί θα κερδίσω με αυτό;
Evgenios1 Δημοσ. 24 Μαρτίου 2009 Δημοσ. 24 Μαρτίου 2009 Τσεκαρε λιγο System.Xml.Serialization.XmlSerializer
Harkon Δημοσ. 24 Μαρτίου 2009 Μέλος Δημοσ. 24 Μαρτίου 2009 oooof... βλακεία είχα κάνει με την XPath τελικά αντί για > nodes = doc.SelectNodes("/rss/channel/item"); foreach(XmlNode nodeX in nodes) { builder = new StringBuilder(); builder.Append("INSERT INTO RSSLines(title,link,description"); builder.Append(",author,category,comments,enclosure,guid,pubDate,source) VALUES("); #region Lines [color=Red]node = nodeX.SelectSingleNode("//rss/channel/item/title");[/color] έπρεπε να γράψω.. > nodes = doc.SelectNodes("/rss/channel/item"); foreach(XmlNode nodeX in nodes) { builder = new StringBuilder(); builder.Append("INSERT INTO RSSLines(title,link,description"); builder.Append(",author,category,comments,enclosure,guid,pubDate,source) VALUES("); #region Lines [b]node = nodeX.SelectSingleNode("title");[/b] ..μιας κ το ερώτημα το έθετα στο child element και όχι στο αρχικό xmldoc θα κοιτάξω πάντως και το XMLSerialization σας ευχαριστώ όλους
Evgenios1 Δημοσ. 25 Μαρτίου 2009 Δημοσ. 25 Μαρτίου 2009 Με το XMLSerialization μετατρεπεις ενα xml σε ενα τυπο(object), ενα απλο παραδειγμα, για να δεις αν σου κανει. Εχει ενα xml > <..> <Persone> <Name>someone</Name> <LastName>some</LastName> <Age>78</Age> </Person> </..> Θα φταξεις μια κλαση > public class Person { public string Name; public string LastName; public int Age } Θα φταξεις ενα "reader" XmlSerializer reader; αυτος θα σου ζητισει το τυπο (για την σειριοποιηση) ο τυπος ειναι Person reader = new XmlSerializer(typeof(Person)); ή Person p; p.GetType() τελος καλεις το Deserialize(stream) reader.Deserialize(File.Open(arxeio)); αυτη σου επιστρεφει ενα object object obj = reader.Deserialize(File.Open(arxeio)); Και εσυ απλα το μετατρεπεις σε Person Person p=(Person)obj; και εχεις τα αναλογα της κλασης. ΥΓ1: Στη δατακλας πρεπει οι μεταβλιτες να ειναι public. ΥΓ2: Δες τα attribute που σου προσφερει για την δατακλας
mula Δημοσ. 25 Μαρτίου 2009 Δημοσ. 25 Μαρτίου 2009 Ρε παιδια εχω μια ακσηση στι C και δεν μπορω να τη λυσω.μηπως θα ηταν ευκολο μια βοηθεια?
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.