vasgen Δημοσ. 23 Ιανουαρίου 2009 Δημοσ. 23 Ιανουαρίου 2009 Καλησπερα σε ολους, Εχουμε ενα προβλημα για ενα project για το πανεπιστημιο? Εχουμε το παρακατω XML αρχειο και πρεπει να το διαβαζουμε σε JAVA και να εχουμε εξοδο ενα .TXT αρχειακι το οποιο να ειναι του τυπου π.χ. "DSC01909 x=250 y=240 χ1=350 y1=300" "DSC01901 x=140 y=135 x1=250 y1=220" k.o.k. Δηλαδη να μας γραφει το ονομα της εικονας και την αρχη και το τελος των pixel που ενδιαφερουν μεσα απο την εικονα οπως εμφανιζονται στο XML αρχειο... Εδω ειναι ενα κομματι του XML αρχειου και του κωδικα σε JAVA.. Οποιος μπορει να βοηθησει θα του ειμαι ευγνωμων.... import java.io.File;import org.w3c.dom.Document; import org.w3c.dom.*; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.DocumentBuilder; import org.xml.sax.SAXException; import org.xml.sax.SAXParseException; public class ReadAndPrintXMLFile{ public static void main (String argv []){ DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder(); Document doc = docBuilder.parse (new File("objects.xml")); // normalize text representation doc.getDocumentElement ().normalize (); System.out.println ("Root element of the doc is " + doc.getDocumentElement().getNodeName()); NodeList listOfPictures = doc.getElementsByTagName("picture"); int totalPictures = listOfPictures.getLength(); System.out.println("Total no of pictures : " + totalPictures); for(int s=0; s<listOfPictures.getLength() ; s++){ Node firstPictureNode = listOfPictures.item(s); if(firstPictureNode.getNodeType() == Node.ELEMENT_NODE){ Element firstPictureElement = (Element)firstPictureNode; //------- NodeList firstNameList = firstPictureElement.getElementsByTagName("X"); Element firstNameElement = (Element)firstNameList.item(0); NodeList textFNList = firstNameElement.getChildNodes(); System.out.println("X : " + ((Node)textFNList.item(0)).getNodeValue().trim()); //------- NodeList lastNameList = firstPictureElement.getElementsByTagName("Y"); Element lastNameElement = (Element)lastNameList.item(0); NodeList textLNList = lastNameElement.getChildNodes(); System.out.println("Y : " + ((Node)textLNList.item(0)).getNodeValue().trim()); }//end of if clause }//end of for loop with s var }//end of main } Εχουμε φτασει μεχρι εδω αλλα καπου το χασαμε και θα θελαμε την βοηθεια καπιου πιο ειδικου... objects.txt
vasgen Δημοσ. 27 Φεβρουαρίου 2009 Μέλος Δημοσ. 27 Φεβρουαρίου 2009 Καλησπερα σε ολους, Εχω το εξης προβλημα εχω ενα XML αρχειο και το κανω parse με Java, το 1ο προβλημα μου ειναι οτι δεν μου κανει ολο το XML αρχειο Parse αλλα ενα κομματι μονο και 2ο οτι εκει που κανει parse μεσα στο tag <dir_path> βγαζει σαν εξοδο μονο τα πρωτα Χ και Υ που βρισκει, και οχι ολα οσα ειναι μεσα σε καθε tag <dir_path>, αν μπορει καπoioς να βοηθησει ... Ευχαριστω εκ των προτερων... > import java.io.File; import org.w3c.dom.Document; import org.w3c.dom.*; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.DocumentBuilder; import org.xml.sax.SAXException; import org.xml.sax.SAXParseException; public class ReadAndPrintXMLFile{ public static void main (String argv []){ try { DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder(); Document doc = docBuilder.parse (new File("objects.xml")); // normalize text representation doc.getDocumentElement().normalize(); System.out.println ("Root element of the doc is " + doc.getDocumentElement().getNodeName()); NodeList listOfPictures = doc.getElementsByTagName("picture"); int totalPictures = listOfPictures.getLength(); System.out.println("Total no of pictures : " + totalPictures); for(int s=0; s<listOfPictures.getLength() ; s++){ Node firstPictureNode = listOfPictures.item(s); if(firstPictureNode.getNodeType() == Node.ELEMENT_NODE){ Element firstPictureElement = (Element)firstPictureNode; NodeList PicturesNamesList = firstPictureElement.getElementsByTagName("dir_path"); Element PicNameElement = (Element)PicturesNamesList.item(0); NodeList textPicList = PicNameElement.getChildNodes(); System.out.println("Picture_Name: " + ((Node)textPicList.item(0)).getNodeValue().trim()); //------- NodeList XcordList = firstPictureElement.getElementsByTagName("x"); Element XcordElement = (Element)XcordList.item(0); NodeList textXList = XcordElement.getChildNodes(); System.out.println("X : " + ((Node)textXList.item(0)).getNodeValue().trim()); //------- NodeList YcordList = firstPictureElement.getElementsByTagName("y"); Element YcordElement = (Element)YcordList.item(0); NodeList textYList = YcordElement.getChildNodes(); System.out.println("Y : " + ((Node)textYList.item(0)).getNodeValue().trim()); }//end of if clause }//end of for loop with s var } catch (Exception ex) { System.out.print("exception"); } }//end of main } objects.txt.zip
ilias_t Δημοσ. 27 Φεβρουαρίου 2009 Δημοσ. 27 Φεβρουαρίου 2009 Having fun with XML, ε??? Αν θέλεις έναν πιο γρήγορο και εύκολο τρόπο για parsing, δοκίμασε κάποια βιβλιοθήκη όπως το dom4j http://www.dom4j.org/ Αυτό, με χρήση του xpath, σου επιτρέπει να βρίσκεις γρήγορα όλα τα nodes, χωρίς να γράφεις εσύ κώδικα. Ρίξε μια ματιά...
vag_pRiMi Δημοσ. 27 Φεβρουαρίου 2009 Δημοσ. 27 Φεβρουαρίου 2009 Σωστά μου φάνηκε ότι σε έχω ξαναματαδεί . Δεν είναι κακό που επιμένεις, αλλά θα ήταν σωστό να συνέχιζε το προηγούμενο θέμα ώστε να υπάρχει συνέχεια; Για να δούμε τι θα δούμε..... [bRB, το κοιτάω για να σε βοηθήσω, ελπίζω σύντομα ]
Evgenios1 Δημοσ. 27 Φεβρουαρίου 2009 Δημοσ. 27 Φεβρουαρίου 2009 Στη java δε πεζει κανα πακετακι που να περιεχει κατι σαν και το XmlSerializer της .net3,5 ?
vasgen Δημοσ. 27 Φεβρουαρίου 2009 Μέλος Δημοσ. 27 Φεβρουαρίου 2009 Δεν ειναι οτι επιμενω εγω, η Java επιμενει μαζι μου... Εχω προχωρηση λιγο τον κωδικα και σκαλωσα παλι..Οποια βοηθεια παιζει δεκτη... Ευχαριστω.......
vag_pRiMi Δημοσ. 27 Φεβρουαρίου 2009 Δημοσ. 27 Φεβρουαρίου 2009 το 1ο προβλημα μου ειναι οτι δεν μου κανει ολο το XML αρχειο Parse αλλα ενα κομματι μονο Parse κάνει όλο το XML, όπως άλλωστε σου λέει και το >System.out.println("Total no of pictures : " + totalPictures); Σύνολο 41, έτσι; Το πρόβλημά σου βρίσκεται εδώ: > <picture> <dir_path>DSC01019</dir_path> <lastEdit>Wed Nov 05 13:10:33 CET 2008</lastEdit> </picture> και θα το είχες δει αν δεν είχες κάνει αυτό: > } catch (Exception ex) { System.out.print("exception"); } αλλά αυτό: > catch (Exception oops) { oops.printStackTrace(); } το οποίο όταν τρέχεις τον κώδικά σου βγάζει το μήνυμα λάθους > Picture_Name: DSC01019 java.lang.NullPointerException at ReadAndPrintXMLFile.main(ReadAndPrintXMLFile.java:52) Άρα πηγαίνεις στη γραμμή 52 του κώδικά σου και βλέπεις ότι το XcordElement είναι NULL διότι στη γραμμή 49 ζητάς από το firstPictureElement να σου φέρει όλα τα παιδιά του με το όνομα "x", που όμως τέτοια παιδιά δεν έχει. 2ο οτι εκει που κανει parse μεσα στο tag <dir_path> βγαζει σαν εξοδο μονο τα πρωτα Χ και Υ που βρισκει, και οχι ολα οσα ειναι μεσα σε καθε tag <dir_path> Δυστυχώς τα προγράμματα κάνουν μόνο αυτό που τους λέμε, έτσι και το δικό σου. Δεν ξέρω αν σε κώδικά που δεν φαίνεται εδώ προσπάθησες κάτι άλλο, αλλά εδώ δεν προσπαθείς πουθενά να τυπώσεις το element <points> Βάλε το παρακάτω μέσα > //-------vag_pRiMi Element points = (Element)firstPictureElement.getElementsByTagName("points").item(0); System.out.println("Points in picture: " + points.getElementsByTagName("point").getLength()); Αυτό θα σου τυπώσει πόσα <point> elements έχεις σε κάθε <object>. Επομένως ποτέ άδεια catch blocks και πάντα με printStackTrace() HTH
vasgen Δημοσ. 27 Φεβρουαρίου 2009 Μέλος Δημοσ. 27 Φεβρουαρίου 2009 Μαστορη, ευχαριστω παρα πολυ για τον χρονο σου, απλα με εχουν βαλει να φτιαξω αυτο το μαραφετη και οπως θα καταλαβες και σει δεν εχω και πολυ εμπειρια επη του θεματος.... Σε ευχαριστω και παλι....
vag_pRiMi Δημοσ. 28 Φεβρουαρίου 2009 Δημοσ. 28 Φεβρουαρίου 2009 Μαστορη...... :lol: Να'σαι καλά,και εις ανώτερα
vasgen Δημοσ. 28 Φεβρουαρίου 2009 Μέλος Δημοσ. 28 Φεβρουαρίου 2009 catch (Exception oops) { oops.printStackTrace(); } Φιλος εκανα την αλλαγη στο exception και οντος μου βγαζει αυτο το λαθος που μου αναφερεις, αλλα δεν μπορω να καταλαβω τι ειναι αυτο που ειναι Null και πρεπει να το αλλαξω.? Σορρυ για την ταλαιπωρια...αν σου ειναι ευκολο.......
Evgenios1 Δημοσ. 28 Φεβρουαρίου 2009 Δημοσ. 28 Φεβρουαρίου 2009 catch (Exception oops) { oops.printStackTrace(); } Φιλος εκανα την αλλαγη στο exception και οντος μου βγαζει αυτο το λαθος που μου αναφερεις, αλλα δεν μπορω να καταλαβω τι ειναι αυτο που ειναι Null και πρεπει να το αλλαξω.? Σορρυ για την ταλαιπωρια...αν σου ειναι ευκολο....... huhu
Super Moderators paredwse Δημοσ. 28 Φεβρουαρίου 2009 Super Moderators Δημοσ. 28 Φεβρουαρίου 2009 Λάθος forum διαλέξαν μερικά νεόκοπα μέλη για να βγάλουν λεφτά - και να μας κάνουν και διάλεξη περί fora, από πάνω.
Evgenios1 Δημοσ. 28 Φεβρουαρίου 2009 Δημοσ. 28 Φεβρουαρίου 2009 Λάθος forum διαλέξαν μερικά νεόκοπα μέλη για να βγάλουν λεφτά - και να μας κάνουν και διάλεξη περί fora, από πάνω. Τι να βγαλει ??? ενα 20ρικακι το μηνα ?? Αυτο ειναι γελιο!! Δε παει καλυτερα να μιρασει κανα φιλαδιο, περισοτερα θα βγαλει!
vag_pRiMi Δημοσ. 4 Μαρτίου 2009 Δημοσ. 4 Μαρτίου 2009 δεν μπορω να καταλαβω τι ειναι αυτο που ειναι Null και πρεπει να το αλλαξω.? Όπως και για κάθε <picture> έτσι και στο παρακάτω > <picture> <dir_path>DSC01019</dir_path> <lastEdit>Wed Nov 05 13:10:33 CET 2008</lastEdit> </picture> ο κώδικάς σου εκτελεί τη γραμμή: >NodeList XcordList = firstPictureElement.getElementsByTagName("x"); Το <picture> 'DSC01019' όμως δεν έχει παιδιά με όνομα "x". Έτσι το NodeList XcordList είναι null. Ή με άλλα λόγια η 'μέθοδος' getElementsByTagName("x") επιστρέφει null. Οι λύσεις είναι δύο: Συμπληρώνεις τα παιδιά του <picture> που λείπουν Προσθέτεις έλεγχο για null Για το [2] κάνεις το εξής απλό: >NodeList XcordList = firstPictureElement.getElementsByTagName("x"); [b]if (XcordList != null) {[/b] Element XcordElement = (Element)XcordList.item(0); NodeList textXList = XcordElement.getChildNodes(); System.out.println("X : " + ((Node)textXList.item(0)).getNodeValue().trim()); [b]}[/b] HTH
vasgen Δημοσ. 9 Μαρτίου 2009 Μέλος Δημοσ. 9 Μαρτίου 2009 Ευχαριστω Vag_...., Μια τελευταια ερωτηση τωρα εχω διαβασει το XML αρχειο , εχω διαβασει τις τιμες που με ενδιαφερουν και τις εχω αποθηκευση σε Vector κανοντας τες πρωτα parse se integer..Ξερει κανεις πως θα εκτυπωσω σε txt αρχειο τις τιμες απο το Vector...??? Ευχαριστω και παλι....
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.