XML Parser

Taramsis

Bekanntes Mitglied
Hi Leute,

ich versuch grad Daten aus dem folgendem XML-Datei:

[XML]<data xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xxforms="http://orbeon.org/oxf/xml/xforms"
xmlns:ev="http://www.w3.org/2001/xml-events">
<set name="Add">
<number1>10</number1>
<number2>20</number2>
</set>
<set name="Substract">
<number1>20</number1>
<number2>10</number2>
</set>
<set name="Multiply">
<number1>10</number1>
<number2>20</number2>
</set>
<set name="Divide">
<number1>20</number1>
<number2>10</number2>
</set>
</data>[/XML]

die Daten zu lesen. Ich wollte in Java die Datei einlesen und daraus StringArrays bilden:
z.B.: add["10","20"] substract["20", "10"]

Ich hab mich über den DOM-Parser informiert und folgenden Ansatz, aber wie lese ich den Kram in die Strings.

Java:
package XMLParser;


import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.*;
import org.xml.sax.SAXException;


public class xmlParser {


private int summand1, minuend, faktor1, dividend;
private int summand2, substrahand, faktor2, divisor;
private Document dom = null;
private DocumentBuilder db;
private String[] ergebniss;
private String[] add;


    public xmlParser() {

    }

    public void generateData() throws SAXException, IOException{
        String[] add = new String[2];
        
        dom = db.parse("d://test.xml");
        Element docEle = dom.getDocumentElement();
        NodeList nl;
        nl = docEle.getElementsByTagName("Add");
        ergebniss[0] = nl.item(0).getTextContent();
        nl = docEle.getElementsByTagName("Add");
        ergebniss[1] = nl.item(0).getTextContent();

    }

}
 
S

SlaterB

Gast
Ergebnis besser ohne Doppel-s

was funktioniert denn nun nicht? du liest doch anscheinend Daten in verschiedene Array-Positionen, was willst du mehr?
das Array ist bisher vielleicht noch null, vorher anlegen

> String[] add = new String[2];
hier legst du eine neue lokale Variable an, während das Klassenattribut null bleibt, schreibe lieber
add = new String[2];
 

Taramsis

Bekanntes Mitglied
Danke !
Ich bekomm ne Nullpointer in der zeile:
Java:
dom = db.parse("d://test.xml");

Und wie kann "number1" und "number2" unter "add" einlesen.

???:L
 

Taramsis

Bekanntes Mitglied
Danke die Meldung ist weg!

nun hab ich folgendes Prob:

Java:
 public void generateData() throws SAXException, IOException, ParserConfigurationException{
        add = new String[2];
        db = DocumentBuilderFactory.newInstance().newDocumentBuilder();

        
        dom = db.parse("d://test.xml");
        Element docEle = dom.getDocumentElement();
        NodeList nl;
        nl = docEle.getElementsByTagName("Add");
        add[0] = nl.item(0).getTextContent();      //<---- Nullpointer
        nl = docEle.getElementsByTagName("Add");
        add[1] = nl.item(0).getTextContent();

        System.out.println(Arrays.toString(add));
    }

In der obigen Zeile bekomme ich ne Exception. Wie kann ich denn Die Zahlen auslesen?
 

Noctarius

Top Contributor
Du lädst das Document (das ist bei dir die Variable dom wenn ich das richtig gesehen habe, deswegen hatte ich das auch gleich richtig in den Code geschrieben ;)) wie bisher auch.

Über die NodeList iterierst du so:
Java:
for (int i = 0; i < result.getLength(); i++) {
    Node node = result.item(i);
    ...
}
 

Noctarius

Top Contributor
Java:
node.getChildNodes();

Mit dem XmlParser aus der Signature hättest du es glaube ich einfacher gehabt :D
 

Taramsis

Bekanntes Mitglied
Die Methode sieht wie folgt aus:

Java:
public void generateData() throws SAXException, IOException, ParserConfigurationException, XPathExpressionException{
        add = new Object[1];
        
        Node node = null;

        db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
        Document dom = db.parse("d://test.xml");


        XPath xpath = XPathFactory.newInstance().newXPath();
        NodeList result = (NodeList) xpath.evaluate("//*[@name='Add']", dom, XPathConstants.NODESET);

        result.toString();

        

        for (int i = 0; i < result.getLength(); i++) {
            node = result.item(i);
            System.out.println(i);
        }

        
        System.out.println("Add:" + node.getChildNodes());
        
    }

Und dies ist die Ausgabe:


Was mache ich falsch?
 

Noctarius

Top Contributor
Java:
package com.example;

import java.io.IOException;
import java.io.InputStream;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;

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

public class Test {
	public static void main(String[] args) throws XPathExpressionException,
			ParserConfigurationException, SAXException, IOException {
		InputStream is = Test.class.getResourceAsStream("foo.xml");
		read(is);
	}

	public static void read(InputStream is)
			throws ParserConfigurationException, SAXException, IOException,
			XPathExpressionException {
		DocumentBuilder db = DocumentBuilderFactory.newInstance()
				.newDocumentBuilder();
		Document dom = db.parse(is);

		XPath xpath = XPathFactory.newInstance().newXPath();
		NodeList result = (NodeList) xpath.evaluate("//*[@name='Add']", dom,
				XPathConstants.NODESET);

		result.toString();

		for (int i = 0; i < result.getLength(); i++) {
			Node node = result.item(i);
			System.out.println(i);

			for (int o = 0; o < node.getChildNodes().getLength(); o++) {
				Node child = node.getChildNodes().item(o);
				
				if (child instanceof Element)
					System.out.println("Add:" + node.getChildNodes().item(o));
			}
		}
	}
}
 

Taramsis

Bekanntes Mitglied
Vielen Dank!

Die Pfadeingabe wäre doch so:
Java:
InputStream is = Test.class.getResourceAsStream("d://foo.xml");

Bei mir erscheint, dass der Inputstream null ist!????:L
 

Noctarius

Top Contributor
Nein du musst ganz normal wie vorher auch dein File laden. Ich hab das File nur direkt im Classpath gehabt, daher konnte ich das so laden.
 

Taramsis

Bekanntes Mitglied
Ich orginal dein Code und es in meiner Klasse adaptiert und die Ausgabe ist immer:

Add:[number1: null]
Add:[number2: null]

Ich will ja den Wert zwischen [XML]<number1>10<number1>[/XML] und ich glaube er gibt mir den Wert von "number"!

Ich muss irgendwie den text dazwischen auslesen!;:)oops:
 

Murray

Top Contributor
Was soll der String x enthalten? "10 + 20", "1020" oder "30"?

//EDIT: ich tippe mal auf letzteres. Vielleicht so:
Java:
        for (int i = 0; i < result.getLength(); i++) {
            Node node = result.item(i);
            int sum = 0;
            for (int o = 0; o < node.getChildNodes().getLength(); o++) {
                Node child = node.getChildNodes().item(o);
                if (child instanceof Element)  {
                	int n = Integer.parseInt( child.getTextContent().trim());
                	sum += n;
                }
            }
        }
        
        String x = Integer.toString( sum);
 
Zuletzt bearbeitet:


Schreibe deine Antwort... und nutze den </> Button, wenn du Code posten möchtest...
Ähnliche Java Themen
  Titel Forum Antworten Datum
Ras Unterschied zwischen parser xml and api xml Java Basics - Anfänger-Themen 7
B Parser dynamisieren Java Basics - Anfänger-Themen 7
W Einfachen, ein beliebiges Zeichen oft erkennenden Regex Parser selber schreiben - wie vorgehen? Java Basics - Anfänger-Themen 12
D Input/Output CSV Parser list unvollständig Java Basics - Anfänger-Themen 25
U DOM Parser, kleine Frage Java Basics - Anfänger-Themen 29
H java date-time parser Java Basics - Anfänger-Themen 1
X SAX Parser, wie weit ist der eigentlich? Java Basics - Anfänger-Themen 6
O HTML -> BBCode Parser? Java Basics - Anfänger-Themen 3
J kleiner Fehler im FAQ Parser für mathematische Formeln Java Basics - Anfänger-Themen 5
H Welcher Html-Parser? Java Basics - Anfänger-Themen 8
M htlm parser Java Basics - Anfänger-Themen 8
U Benötige ich einen Parser? Java Basics - Anfänger-Themen 2
T Parser mit switch "Weg" ausgeben? Java Basics - Anfänger-Themen 5
A html parser Java Basics - Anfänger-Themen 5
data89 Frage zum FAQ-'Parser für mathematische Formeln' Java Basics - Anfänger-Themen 4
T Wofür Parser?? Java Basics - Anfänger-Themen 39
A Gettext-Parser: Rad neu erfinden Java Basics - Anfänger-Themen 6
G Eigener Parser Java Basics - Anfänger-Themen 4
G guter Parser Java Basics - Anfänger-Themen 4
G Parser liefert StackOverflow error Java Basics - Anfänger-Themen 6
L URL Parser (String zusammensetzen) Java Basics - Anfänger-Themen 2
G If-Parser + Interpreter Java Basics - Anfänger-Themen 9
E HTML Parser Java Basics - Anfänger-Themen 8
B Parser HTML Java Basics - Anfänger-Themen 10
J Noch ein Parser Problem Java Basics - Anfänger-Themen 7
J Richtigen Parser wählen Java Basics - Anfänger-Themen 2
M.C.S. Parser: Flut von Variablen und if-Conditions eindämmen Java Basics - Anfänger-Themen 4
A Parser Java Basics - Anfänger-Themen 4

Ähnliche Java Themen


Oben