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

C# NodeList Itteration


Harkon

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

Δημοσ.

καλημέρα σας

 

μάλλον κουράστηκαν τα μάτια μου και δεν βλέπω κάτι απλό - λογικά

 

προσπαθώ να κάνω επανάληψη σε ένα 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

Δημοσ.

Χωρίς να είμαι σίγουρος, νομίζω πως το "builder = new StringBuilder();" που έχεις μέσα στο foreach φταίει που βάζει πάντα τα ίδια δεδομένα. Έχεις δοκιμάσει να το βγάλεις έξω από την loop και απλά στο τέλος της να του δίνεις κάποια null τιμή για να μην έχει απομεινάρια?

Δημοσ.

χμμ να πω την αληθεια δεν βρήκα πως "καθαρίζει" και υπέθεσα πως αν το αρχικοποιώ κάθε φορά θα είναι σαν καινούριο

 

θα το δοκιμάσω και θα επανέλθω, ευχαριστώ πολύ!

Δημοσ.

ααα πολύ καλό ευχαριστώ ρε συ να σαι καλα!

θα το δω οταν γυρισω σπιτι κ θα σου πω

 

ευχαριστω κ παλι!

Δημοσ.

rss είναι, οπότε έχει σίγουρα κάποια στανταρ elements και κάποια άλλα που μπορει να υπάρχουν, μπορεί και όχι

 

αυτό που κάνω είναι η αποθήκευση δεδομένων από rss σε πίνακες sqlsrv

 

τι εννοείς με την σειριοποίηση όμως, δεν την έχω ψάξει καθόλου.

τί θα κερδίσω με αυτό;

Δημοσ.

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

 

σας ευχαριστώ όλους

Δημοσ.

Με το 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 που σου προσφερει για την δατακλας :-(

Δημοσ.

Ρε παιδια εχω μια ακσηση στι C και δεν μπορω να τη λυσω.μηπως θα ηταν ευκολο μια βοηθεια?

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

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