πρόβλημα σε πρόγραμμα για xml parser με dom

Συζητήσεις για την Java

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
eleutheria87
Δημοσιεύσεις: 10
Εγγραφή: 28 Νοέμ 2010 20:41

πρόβλημα σε πρόγραμμα για xml parser με dom

Δημοσίευση από eleutheria87 » 01 Φεβ 2012 21:03

καλησπέρα, έχω ένα κείμενο σε xml και θέλω να το κάνω parsing με dom. το πρόβλημα προκύπτει στην προτελευταία συνάρτηση την public Function getFunction (Element empEl) που έχω φτιάξει καθώς θέλω τα στοιχεία του tag <UsedFunctions> να παιρνάνε σε string πίνακα και επίσης μου χτυπάει λάθος σε αυτήν την εντολή Function e = new Function(used[] ,type); καθώς μου λέει πως πρέπει να υλοποιήσω έναν constructor. παραθέτω το xml καθώς και τον κώδικά μου αν μπορείτε να μου πείτε τι λάθος υπάρχει.

<Program> TestProgram
<Function f1>
<UsedFunctions>
f2
f4
</UsedFunctions>
</Function>
<Function f2>
<UsedFunctions>
</UsedFunctions>
</Function>
<Function f3>
<UsedFunctions>
f4
</UsedFunctions>
</Function>
<Function f4>
<UsedFunctions>
</UsedFunctions>
</Function>
&#8230;&#8230;&#8230;&#8230;&#8230;
</Program>

Κώδικας: Επιλογή όλων

 public void parseXmlFile&#40;&#41; &#123;
        Document ret = null;
        DocumentBuilderFactory domFactory;
        DocumentBuilder builder;
        ArrayList myFunc  = new ArrayList&#40;&#41;;
      
 
        try &#123;
            //δημιουργεί ένα κενό κείμενο xml
            domFactory = DocumentBuilderFactory.newInstance&#40;&#41;;
            domFactory.setValidating&#40;false&#41;;
            domFactory.setNamespaceAware&#40;false&#41;;
            builder = domFactory.newDocumentBuilder&#40;&#41;;
            ret = builder.parse&#40;"test.xml"&#41;;//αποθηκεύει το xml αρχείο
                    &#125;                           
        catch &#40;Exception ex&#41; &#123;
            System.err.println&#40;"unable to load XML&#58; " + ex&#41;;
        &#125;
        //δημιουργεί λίστα με τα στοιχεία του root element
		Element docEle = ret.getDocumentElement&#40;&#41;;

		NodeList nl = docEle.getElementsByTagName&#40;"Function"&#41;;
		if&#40;nl != null && nl.getLength&#40;&#41; > 0&#41; &#123;
			for&#40;int i = 0 ; i < nl.getLength&#40;&#41;;i++&#41; &#123;				
				Element el = &#40;Element&#41;nl.item&#40;i&#41;;
				Function e = getFunction&#40;el&#41;;
				myFunc.add&#40;e&#41;;
			&#125;
		&#125;
	&#125;
        //διαβάζει τα εσωτερικά tags tou function
       public Function getFunction &#40;Element empEl&#41; &#123;

            
		String used = getTextValue&#40;empEl,"UsedFunctions"&#41;;
		String type = empEl.getAttribute&#40;"type"&#41;;

		Function e = new Function&#40;used ,type&#41;;

		return e;
	&#125;
       
       public  String getTextValue&#40;Element ele, String tagName&#41; &#123;
		String textVal = null;
		NodeList nl = ele.getElementsByTagName&#40;tagName&#41;;
		if&#40;nl != null && nl.getLength&#40;&#41; > 0&#41; &#123;
			Element el = &#40;Element&#41;nl.item&#40;0&#41;;
			textVal = el.getFirstChild&#40;&#41;.getNodeValue&#40;&#41;;
		&#125;

		return textVal;
	&#125;

Άβαταρ μέλους
virxen75
Δημοσιεύσεις: 493
Εγγραφή: 18 Φεβ 2009 00:17
Τοποθεσία: ΗΡΑΚΛΕΙΟ ΚΡΗΤΗΣ

πρόβλημα σε πρόγραμμα για xml parser με dom

Δημοσίευση από virxen75 » 02 Φεβ 2012 00:02

η κλάση Function που είναι?

eleutheria87
Δημοσιεύσεις: 10
Εγγραφή: 28 Νοέμ 2010 20:41

πρόβλημα σε πρόγραμμα για xml parser με dom

Δημοσίευση από eleutheria87 » 02 Φεβ 2012 00:08

είναι η κλάση που έχω βάλει μέσα αυτές τις συναρτήσεις

Άβαταρ μέλους
virxen75
Δημοσιεύσεις: 493
Εγγραφή: 18 Φεβ 2009 00:17
Τοποθεσία: ΗΡΑΚΛΕΙΟ ΚΡΗΤΗΣ

πρόβλημα σε πρόγραμμα για xml parser με dom

Δημοσίευση από virxen75 » 02 Φεβ 2012 00:33

στείλε όλη την κλάση για να βγάλω άκρη

eleutheria87
Δημοσιεύσεις: 10
Εγγραφή: 28 Νοέμ 2010 20:41

πρόβλημα σε πρόγραμμα για xml parser με dom

Δημοσίευση από eleutheria87 » 02 Φεβ 2012 00:42

δεν έχω βάλει κάτι άλλο μέσα στην κλάση, και γι αυτό μου χτυπάει λογικά λάθη..απλά δεν ξέρω τι να αρχικοποιήσω. το όλο point είναι οτι θέλω να βάλω τα περιεχόμενα το <UsedFunction> απο το xml σε ένα πίνακα String

Άβαταρ μέλους
virxen75
Δημοσιεύσεις: 493
Εγγραφή: 18 Φεβ 2009 00:17
Τοποθεσία: ΗΡΑΚΛΕΙΟ ΚΡΗΤΗΣ

πρόβλημα σε πρόγραμμα για xml parser με dom

Δημοσίευση από virxen75 » 02 Φεβ 2012 00:57

Function e = new Function(used ,type);
εδώ χρησιμοποιείς τον constructor της κλάσης
στην κλάση σου έχεις βάλει κάτι τέτοιο ή όχι?

αν ναι τι περιέχει.

public Function(......){
.....
}

eleutheria87
Δημοσιεύσεις: 10
Εγγραφή: 28 Νοέμ 2010 20:41

πρόβλημα σε πρόγραμμα για xml parser με dom

Δημοσίευση από eleutheria87 » 02 Φεβ 2012 01:05

public Function(String used,String type){
String x = new String[100];
}

έχω βάλει αυτό με προφανώς όχι σωστές δηλώσεις.

Άβαταρ μέλους
virxen75
Δημοσιεύσεις: 493
Εγγραφή: 18 Φεβ 2009 00:17
Τοποθεσία: ΗΡΑΚΛΕΙΟ ΚΡΗΤΗΣ

πρόβλημα σε πρόγραμμα για xml parser με dom

Δημοσίευση από virxen75 » 02 Φεβ 2012 01:21

το αρχείο xml είναι σίγουρα σωστό?

eleutheria87
Δημοσιεύσεις: 10
Εγγραφή: 28 Νοέμ 2010 20:41

πρόβλημα σε πρόγραμμα για xml parser με dom

Δημοσίευση από eleutheria87 » 02 Φεβ 2012 01:24

ναι αν εξαιρέσεις τις τελίτσες που δεν υπάρχουν. έτσι μας το έδωσαν τουλάχιστον..δεν βρίσκεις το λάθος; πραγματικά σε ευχαριστώ για τον χρόνο που διαθέτεις..είναι η πρώτη φορά που προγραμματίζω σε java και είχα μόνο ένα απόγευμα στην διάθεση μου για να διαβάσω και να κάτσω να γράψω.

Άβαταρ μέλους
virxen75
Δημοσιεύσεις: 493
Εγγραφή: 18 Φεβ 2009 00:17
Τοποθεσία: ΗΡΑΚΛΕΙΟ ΚΡΗΤΗΣ

πρόβλημα σε πρόγραμμα για xml parser με dom

Δημοσίευση από virxen75 » 02 Φεβ 2012 02:31

το πιο κοντινο που μπορώ να γράψω είναι

Κώδικας: Επιλογή όλων

import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;


import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class DomParserExample &#123;
	ArrayList<String> myFunc;
	Document dom;


	public DomParserExample&#40;&#41;&#123;
		myFunc = new ArrayList<String>&#40;&#41;;
	&#125;

	public void runExample&#40;&#41; &#123;
		parseXmlFile&#40;&#41;;
		parseDocument&#40;&#41;;
		printData&#40;&#41;;
	&#125;
	
	
	private void parseXmlFile&#40;&#41;&#123;
		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance&#40;&#41;;
		
		try &#123;
			DocumentBuilder db = dbf.newDocumentBuilder&#40;&#41;;
			dom = db.parse&#40;"test.xml"&#41;;
		&#125;catch&#40;ParserConfigurationException pce&#41; &#123;
			pce.printStackTrace&#40;&#41;;
		&#125;catch&#40;SAXException se&#41; &#123;
			se.printStackTrace&#40;&#41;;
		&#125;catch&#40;IOException ioe&#41; &#123;
			ioe.printStackTrace&#40;&#41;;
		&#125;
	&#125;

	
	private void parseDocument&#40;&#41;&#123;
		Element docEle = dom.getDocumentElement&#40;&#41;;
		NodeList nl = docEle.getElementsByTagName&#40;"Function"&#41;;
		if&#40;nl != null && nl.getLength&#40;&#41; > 0&#41; &#123;
			for&#40;int i = 0 ; i < nl.getLength&#40;&#41;;i++&#41; &#123;
				Element el = &#40;Element&#41;nl.item&#40;i&#41;;
				String e = getFunction&#40;el&#41;;
				String x&#91;&#93;=e.split&#40;"\n"&#41;;//xorizo se grammes
			    for &#40;int j=0;j<x.length;j++&#41;&#123;
				   if &#40;!x&#91;j&#93;.trim&#40;&#41;.equals&#40;""&#41;&#41;//an bro onoma sinartisis 
						myFunc.add&#40;x&#91;j&#93;&#41;;//to pros8eto
			    &#125;
				
			&#125;
		&#125;
	&#125;

	private String getFunction&#40;Element empEl&#41; &#123;
		String name = getTextValue&#40;empEl,"UsedFunctions"&#41;;
		return name;
	&#125;


	private String getTextValue&#40;Element ele, String tagName&#41; &#123;
		String textVal = null;
		NodeList nl = ele.getElementsByTagName&#40;tagName&#41;;
		if&#40;nl != null && nl.getLength&#40;&#41; > 0&#41; &#123;
			Element el = &#40;Element&#41;nl.item&#40;0&#41;;
			textVal = el.getFirstChild&#40;&#41;.getNodeValue&#40;&#41;;
		&#125;

		return textVal;
	&#125;

	
	private void printData&#40;&#41;&#123;
		
		System.out.println&#40;"No of used Functions'" + myFunc.size&#40;&#41; + "'."&#41;;
		
		Iterator it = myFunc.iterator&#40;&#41;;
		while&#40;it.hasNext&#40;&#41;&#41; &#123;
			System.out.println&#40;it.next&#40;&#41;.toString&#40;&#41;.trim&#40;&#41;&#41;;
		&#125;
	&#125;

	
	public static void main&#40;String&#91;&#93; args&#41;&#123;
		DomParserExample dpe = new DomParserExample&#40;&#41;;
		dpe.runExample&#40;&#41;;
	&#125;

&#125;

αλλά το xml πρεπει να γινει

Κώδικας: Επιλογή όλων

<Program> TestProgram
<Function f1="1">
<UsedFunctions>
f2
f4
</UsedFunctions>
</Function>
<Function f2="2">
<UsedFunctions>
</UsedFunctions>
</Function>
<Function f3="3">
<UsedFunctions>
f4
</UsedFunctions>
</Function>
<Function f4="4">
<UsedFunctions>
</UsedFunctions>
</Function>
</Program> 
αλλιως σου δίνει λάθος
[Fatal Error] test.xml:2:13: Attribute name "f1" associated with an element type "Function" must be followed by the ' = ' character.

eleutheria87
Δημοσιεύσεις: 10
Εγγραφή: 28 Νοέμ 2010 20:41

πρόβλημα σε πρόγραμμα για xml parser με dom

Δημοσίευση από eleutheria87 » 02 Φεβ 2012 13:13

σε ευχαριστώ πραγματικά τόσο πολύ...ειλικρινά για τον χρόνο σου και για την παραπάνω απο πολύτιμλη βοήθεια σου!

Απάντηση

Επιστροφή στο “Java”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 2 επισκέπτες