bnvdarklord Δημοσ. 15 Φεβρουαρίου 2011 Δημοσ. 15 Φεβρουαρίου 2011 Καλησπέρα Έχω ενα XML αρχείο της μορφής ><root> <element1> <A>AAA</A> <B>BBB</B> </element1> <element2> <A>AAA</A> <B>BBB</B> </element2> ... </root> Και προσπαθώ να διαβάσω τα περιεχόμενα των Α και Β αν δίνεται το εξωτερικό τους element(πχ το elemet1). Εχω γράψει το εξής > XmlDocument xml = new XmlDocument(); xml.Load("xmlfile.xml"); XmlNodeList nodes = xml.GetElementsByTagName(element); string s = nodes.Item(0).InnerXml; Το οποίο στο s επιστρέφει ολόκληρο το περιεχόμενο του element. Πως θα ξεχωρίσω τα περιεχόμενο των <A> και <B>;
Crizzt Δημοσ. 15 Φεβρουαρίου 2011 Δημοσ. 15 Φεβρουαρίου 2011 Νομιζω κατι τετοιο θες: > string strA = nodes.ChildNodes[0].InnerText; string strB = nodes.ChildNodes[1].InnerText;
bnvdarklord Δημοσ. 15 Φεβρουαρίου 2011 Μέλος Δημοσ. 15 Φεβρουαρίου 2011 Ωραιο φανηκε αλλα δεν εχει μέθοδο ChildNodes :S
bnvdarklord Δημοσ. 15 Φεβρουαρίου 2011 Μέλος Δημοσ. 15 Φεβρουαρίου 2011 Ενδιαφέρον που πέρνω αυτό τοτε: Error 1 'System.Xml.XmlNodeList' does not contain a definition for 'ChildNodes' and no extension method 'ChildNodes' accepting a first argument of type 'System.Xml.XmlNodeList' could be found (are you missing a using directive or an assembly reference?)
Crizzt Δημοσ. 15 Φεβρουαρίου 2011 Δημοσ. 15 Φεβρουαρίου 2011 Εχεις αυτα; > using System; using System.IO; using System.Xml;
bnvdarklord Δημοσ. 15 Φεβρουαρίου 2011 Μέλος Δημοσ. 15 Φεβρουαρίου 2011 Δεν είχα το ΙΟ, αλλα δεν αλλαξε τίποτα και που το πρόσθεσα.
kagelos Δημοσ. 15 Φεβρουαρίου 2011 Δημοσ. 15 Φεβρουαρίου 2011 nodes[0].ChildNodes nodes[1].ChildNodes nodes[2].ChildNodes nodes[...].ChildNodes
bnvdarklord Δημοσ. 15 Φεβρουαρίου 2011 Μέλος Δημοσ. 15 Φεβρουαρίου 2011 To πρώτο που δοκίμασα, αλλα μου βγάζει οπως και το Item(0) και τα περιεχόμενα του Α και του Β. Δηλαδη ΑΑΑΒΒΒ. nodes[1] και μετα δεν υπαρχει...
kagelos Δημοσ. 15 Φεβρουαρίου 2011 Δημοσ. 15 Φεβρουαρίου 2011 >XmlDocument doc = new XmlDocument(); doc.Load(@"a.xml"); foreach (XmlNode element in doc.DocumentElement) { MessageBox.Show(element.ChildNodes[0].InnerText); } Επίσης το σωστότερο για το xml σου θα είναι όλα τα tags να λέγονται element αντί για element1, element2 κοκ.
bnvdarklord Δημοσ. 15 Φεβρουαρίου 2011 Μέλος Δημοσ. 15 Φεβρουαρίου 2011 Ναι, αλλά έτσι δεν μπορώ να ξεχωρίζω ποια ειναι στο <element3> πχ(δες original post) edit: Επίσης το σωστότερο για το xml σου θα είναι όλα τα tags να λέγονται element αντί για element1, element2 κοκ. Και να τα ξεχωρίζω με id, οπότε λυνεται παραπάνω απορία μου. edit2: Ναι, το εφτιαξα, έδωσα στα elements ίδιο όνομα και τα ξεχωρίζω με id, με τον κώδικα του kagelos. Ευχαριστώ για την βοήθεια.
kagelos Δημοσ. 15 Φεβρουαρίου 2011 Δημοσ. 15 Φεβρουαρίου 2011 Δεν χρειάζεσαι ID για να βρεις το Ν-ιοστό. Παραδείγματα για παραλλαγές του κώδικα : > XmlDocument doc = new XmlDocument(); doc.Load(@"a.xml"); foreach (XmlNode element in doc.DocumentElement) { MessageBox.Show(element.ChildNodes[0].InnerText); } for (int i = 0; i < doc.DocumentElement.ChildNodes.Count; i++ ) { MessageBox.Show(doc.DocumentElement.ChildNodes[i].ChildNodes[5].InnerText); } XmlNodeList elements = doc.DocumentElement.ChildNodes; MessageBox.Show(elements[5].ChildNodes[3].InnerText); To xml σου θα έπρεπε να είναι κάπως έτσι, αντί το κάθε node να έχει άλλο όνομα : > <?xml version="1.0" encoding="utf-8"?> <root> <element elementid="KOSTAS"> <value>AAA</value> <value>BBB</value> </element> <element elementid="TAKIS"> <value>AAA</value> <value>BBB</value> </element> </root> Μετά θα μπορούσες να χρησιμοποιήσεις XPATH : >XmlDocument doc = new XmlDocument(); doc.Load(@"a.xml"); XmlNodeList elements = doc.DocumentElement.SelectNodes("element[@elementid='TAKIS']"); XmlNode takis = elements[0];
bnvdarklord Δημοσ. 15 Φεβρουαρίου 2011 Μέλος Δημοσ. 15 Φεβρουαρίου 2011 Χρειάζομαι ID γιατι δεν ξέρω οτι ειναι το Ν-οστό, ξέρω απλά οτι λέγεται <Takis> πχ(ή <element id="takis"> πλεον). Αυτο με το XPATH φαινεται ευκολοτερο παντως, ισως το δοκιμασω.
_tasos Δημοσ. 22 Φεβρουαρίου 2011 Δημοσ. 22 Φεβρουαρίου 2011 Απαντάω λιγάκι αργά, αλλά την GetElementByTagName μπορείς να την χρησιμοποιήσεις και σε XmlElement, και όχι μόνο σε XmlDocument. Πρέπει να κάνεις cast τον XmlNode σε XmlElement πρώτα. > System.Xml.XmlDocument myFile = null; System.Xml.XmlNode myNode = null; System.Xml.XmlElement myElement = null; myFile = new System.Xml.XmlDocument(); myFile.LoadXml("<?xml version=\"1.0\" encoding=\"utf-8\" ?><root><subnode>Here I am</subnode></root>"); myElement = (XmlElement)myFile.GetElementsByTagName("root")[0]; myNode = myElement.GetElementsByTagName("subnode")[0]; Έτσι δεν χρειάζεται να έχει πολύ strict δομή το xml αρχείο σου. Αυτό είναι και το νόημα του xml, δεδομένα με χαλαρή δομή.-
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.