XML Attribute auslesen

Häcki.

Mitglied
Hallo Leute,

ich habe folgende XML-Struktur: http://www.openthesaurus.de/synonyme/search?q=Synonym&format=text/xml

Nun möchte ich in Java beispielsweise aus dem ersten Synset-Element alle Kindelemente, die "term" heißen - und von denen benötige ich jeweils das Attribut "term", speziell: dessen Wert.

Im Beispiel wäre das also folgendes, was ich gern (am liebsten) in einem Array hätte:
andere Bezeichnung, anderes Wort für, bedeutungsgleiches Wort, Ersatzwort, Synonym

Der aktuelle Ansatz (Auszug davon - das sollte ja das sein, was wichtig ist) dafür ist folgender:
Java:
	private static void DisplayResults(Document doc) throws XPathExpressionException 
	{
		String searchTerms = "Synonym"
		NodeList results = (NodeList)xpath.evaluate("//matches/synset/term/@term", doc, XPathConstants.NODESET); 

		// Display the results header.
		System.out.println("Web results for " + searchTerms);
		System.out.println();

		// Display the Web results.
		StringBuilder builder = new StringBuilder();
		
		for(int i = 0 ; i < results.getLength(); i++)
		{
			NodeList childNodes = results.item(i).getChildNodes();

			for (int j = 0; j < childNodes.getLength(); j++) 
			{
				if(!childNodes.item(j).getLocalName().equalsIgnoreCase("DisplayUrl"))
				{
					String fieldName = childNodes.item(j).getLocalName();

                                        System.out.println(childNodes.item(j).getTextContent());
					rueckgabe[i][j] = fieldName + ":" + childNodes.item(j).getTextContent();
					builder.append(fieldName + ":" + childNodes.item(j).getTextContent());
					builder.append("\n");
				}
			}

			builder.append("\n");
		}

		System.out.println(builder.toString());
	}

Gibt mir bisher natürlich nur folgende Ausgabe:
Web results for Synonym
Tipps & Tricks?
 
Zuletzt bearbeitet:

Noctarius

Top Contributor
sowas?

Java:
package org.sourceprojects.lycia.incubator.test;

import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;

import org.junit.Test;
import org.sourceprojects.lycia.XmlParser;
import org.sourceprojects.lycia.XmlParserBuilder.GenerationStrategy;
import org.sourceprojects.lycia.fluent.FluentBuilder;
import org.sourceprojects.lycia.incubator.annotations.Attribute;
import org.sourceprojects.lycia.incubator.annotations.ContextObject;
import org.sourceprojects.lycia.incubator.internal.generator.AnnotatedParameterReflectiveGenerator;

import static org.junit.Assert.*;
import static org.sourceprojects.lycia.fluent.FluentBuilder.*;

public class TermParserTestCase {
	private static final String XML_DATA = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<matches><synset><term term=\"foo\" /><term term=\"bar\" /><term /></synset></matches>";

	@Test
	@SuppressWarnings("unchecked")
	public void testXmlPathConfigure() throws Exception {
		Method method = getClass().getMethod("parseData", List.class,
				String.class);

		FluentBuilder<List<String>> builder = prepare();
		builder.configure(validateSchema(false));
		builder.configure(generationStrategy(GenerationStrategy.Customized,
				AnnotatedParameterReflectiveGenerator.class));
		builder.parser(xpath("//matches/synset/term[@term]", method(method,
				this)));

		XmlParser<List<String>> xmlParser = builder.build();

		xmlParser.getParserContext().setContextObject(new ArrayList<String>());

		xmlParser.parse(XML_DATA);
		List<String> values = xmlParser.getParserContext().getContextObject();

		assertEquals(2, values.size());
		assertEquals("foo", values.get(0));
		assertEquals("bar", values.get(1));
	}

	public void parseData(@ContextObject List<String> values,
			@Attribute("term") String value) {

		values.add(value);
	}

}
 
Zuletzt bearbeitet:

Häcki.

Mitglied
Was machst du denn an folgender Stelle?

[JAVA=41] assertEquals(2, values.size());
assertEquals("foo", values.get(0));
assertEquals("bar", values.get(1));
[/code]
 

Noctarius

Top Contributor
Ich benutze hier Lycia. Ich habe das einfach nur fix als Unittest implementiert und mit den 3 Zeilen prüfe ich, ob die aus dem Parser kommenden Werte das sind war ich vermute :)
 

Häcki.

Mitglied
Ah, nun gut okay - ich glaub den Lycia lasse ich erstmal weg. Wobei der recht interessant aussieht. Aber ehe ich mir da jetzt zig Packages wieder installieren muss (hat jemand von euch schonmal mit JADE gearbeitet? Ich hasse solche Agentensysteme ...), bleibe ich erstmal beim SAXParser. In einer freien Minute schau ich mir den Lycia mal genauer an. Danke für den Tipp!

Neue Version des Codes, der sogar mittlerweile ein wenig funktioniert:
Java:
import org.w3c.dom.Document;
import org.w3c.dom.*;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException; 

public class Syn2
{
    public static void main(String argv [])
    {
	    try 
	    {
	    	DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
	        DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
	        Document doc = docBuilder.parse("http://www.openthesaurus.de/synonyme/search?format=text/xml&q=Synonym");
	
	        // normalize text representation
	        doc.getDocumentElement().normalize();
	        System.out.println ("Root element of the doc is " + doc.getDocumentElement().getNodeName());
	
	        NodeList listOfSyn = doc.getElementsByTagName("synset");
	        int totalSyns = listOfSyn.getLength();
	        System.out.println("Total no of synsets: " + totalSyns);
	
	        for(int s=0; s < listOfSyn.getLength(); s++)
	        {
	            Node synsetNode = listOfSyn.item(s);
	            if(synsetNode.getNodeType() == Node.ELEMENT_NODE)
	            {
	                Element termMainElement = (Element)synsetNode;
	                NodeList termList = termMainElement.getElementsByTagName("term");
	                Element termElement = (Element)termList.item(0);
	                System.out.println(termElement.getAttribute("term"));
	            }
	        }
	    }
	    catch(SAXParseException err)
	    {
	        System.out.println ("** Parsing error" + ", line " + err.getLineNumber () + ", uri " + err.getSystemId ());
	        System.out.println(" " + err.getMessage ());
	    }
	    catch(SAXException e)
	    {
	        Exception x = e.getException();
	        ((x == null) ? e : x).printStackTrace ();
	    }
		catch(Throwable t)
		{
		    t.printStackTrace ();
		}
	    //System.exit (0);
    }
}

Gibt mir allerdings nur das jeweils erste Ergebnis eines jeden Synsets aus - soweit ich das nachvollziehen kann ist das wohl auch logisch (zumindest irgendwie ...).

Der "Fehler" liegt vermutlich hier:
[JAVA=26] for(int s=0; s < listOfSyn.getLength(); s++)
{
Node synsetNode = listOfSyn.item(s);
if(synsetNode.getNodeType() == Node.ELEMENT_NODE)
{
Element termMainElement = (Element)synsetNode;
NodeList termList = termMainElement.getElementsByTagName("term");
Element termElement = (Element)termList.item(0);
System.out.println(termElement.getAttribute("term"));
}
}[/code]

Speziell der Teil in der IF-Bedingung.
Kann mir jemand sagen, wie ich nun noch noch ALLE Terms innerhalb des jeweiligen Synset ausgegeben bekomme?
Ich muss wohl irgendwie hieran arbeiten:
Element termElement = (Element)termList.item(0);

Wie bekomme ich denn die Anzahl der TERM-Elemente ermittelt? Wenn ich das hätte, wäre es kein Problem das in einer FOR-Schleife z.B. auszugeben.
Tipps/Tricks?

Edit:
So schwer war es dann doch nicht:
[JAVA=33] int number = termList.getLength();
for(int i = 0; i < number; i++)
{
Element termElement = (Element)termList.item(i);
System.out.println(termElement.getAttribute("term"));
}[/code]
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
W XML einlesen und Attribute auslesen XML & JSON 1
D Attribute aus XML Auslesen XML & JSON 5
S Attribute von Elementen auslesen mit XPath XML & JSON 2
eQuest XML Jaxen Attribute auslesen XML & JSON 2
P Knoten-Attribute einer xsd-Datei in einem JTree auslesen XML & JSON 18
iman XML Attribute mit JAVA einlesen mit Spring Batch XML & JSON 0
L Transformer verschluckt Attribute bei der Ausgabe XML & JSON 3
P Xpath zugriff auf Attribute XML & JSON 3
R cvc-complex-type.3.2.2: Attribute 'uuid' is not allowed to appear in element 'jasperReport'. XML & JSON 4
C JAXB: XML-Elemente einlesen und als XML-Attribute ausgeben XML & JSON 7
F EMF, XSD to ECore mapping, Attribute vs. Element XML & JSON 2
A XML-Attribute vergleichen XML & JSON 4
Helgon MalformedByteSequenceException und null JDOM Attribute XML & JSON 5
G JAXB XML-Attribute feststellen XML & JSON 4
2 wie komme ich an die Attribute XML & JSON 3
B 2 Attribute in einer xsl XML & JSON 2
M Gegenseitig ausschließende Attribute definieren in XSD XML & JSON 7
C DOM: Attribute nicht in alphabetischer Reihenfolge schreiben XML & JSON 3
C Mit SAX Parser XML Attribute auswerten XML & JSON 3
S JAXB und viele verschachtelte Attribute XML & JSON 1
G xquery - nodes unterscheiden sich nur durch attribute :-( XML & JSON 4
L Objekt Serialisierung: Schreiben aller Attribute erzwingen XML & JSON 5
E EMF Modell um alle möglichen Attribute auszulesen XML & JSON 12
S XSD: restriction und attribute gleichzeitig XML & JSON 4
V XMLEncoder: Attribute nicht serialisieren XML & JSON 2
D Wie kann ich Namespace Attribute in den Elementen entfernen? XML & JSON 2
M Attribute parsen XML & JSON 6
D JDOM erzeugt leere xmlns Attribute XML & JSON 4
B jdom outputter ohne attribute XML & JSON 2
G Wie Attribute aus XML in ein Model schreiben (StAX)? XML & JSON 7
M attribute funken nicht XML & JSON 3
R Jtree + Attribute XML & JSON 6
Z DOM: Attribute in Knoten schreiben XML & JSON 2
L JSON auslesen und Labels in GUI verwenden XML & JSON 13
M json page 2 auslesen XML & JSON 1
J Auslesen der Länge einer XML-Datei in Android Studio XML & JSON 8
Kanda Sorata Eingabefelder von Excel Dateien auslesen XML & JSON 1
K XML vernünftig auslesen XML & JSON 9
K XML Datei erstellen und Daten daraus in Java auslesen XML & JSON 6
H SOAPBody auslesen XML & JSON 0
B XML auslesen, benötige Hilfe XML & JSON 13
I Liste in YAML Datei speichern und wieder auslesen XML & JSON 1
A Leeres Array beim Auslesen von XML-Datei XML & JSON 4
M Json auslesen XML & JSON 7
K XML Auslesen, wie abspeichern? XML & JSON 32
W Kindelemente mit JDOM eines bestimmten Attributes auslesen XML & JSON 6
R Apache POI: Gezieltes Auslesen von Zellen XML & JSON 2
S XMl auslesen:@ output ? XML & JSON 1
Z Verschachtelte XML auslesen XML & JSON 3
C JDOM: Value ohne Unterelemente auslesen XML & JSON 1
C XPath: Alle Kinder in einer Schleife auslesen XML & JSON 2
I XML IDs auslesen, erst X dann Y XML & JSON 2
S XML - rekursives auslesen - Zeilenumbruch als NodeValue? XML & JSON 3
O XML richtig auslesen XML & JSON 7
Kenan89 XML Tag-ID auslesen mit getElementById XML & JSON 2
J Excel zeilenweise auslesen - POI XML & JSON 5
J Excel Zellen auslesen - automatischer Stopp bei leerer Zelle XML & JSON 2
I XPath Namensräume und auslesen einzelner Knoten XML & JSON 3
S SVG auslesen und darstellen XML & JSON 5
G xpath: in Kindelement zwei Attribut-Werte auslesen XML & JSON 2
G xpath: Inhalt eines Kindelements auslesen XML & JSON 2
1 Html tabelle auslesen??? XML & JSON 6
JanUlrich Tabelle auslesen XML & JSON 2
A XSl mit JDom auslesen XML & JSON 1
J Anzahl der Elemente in einem XML-Dokument auslesen XML & JSON 7
K XMl auslesen XML & JSON 19
P Poi /XSSF : Excel-Tabelle auslesen XML & JSON 2
S XSD-Datei zulässige Werte auslesen XML & JSON 3
D rss auslesen XML & JSON 2
M Große Datei auslesen/in dieser suchen XML & JSON 2
M RSS-Datei auslesen von Yahoo Webservice XML & JSON 4
N Google Wetter XML (nur current_condition) auslesen mit Java XML & JSON 15
J Dateinamen beim Start auslesen XML & JSON 8
E XML Datei mit DOM auslesen (Text mit Attributen) XML & JSON 2
P jdom XML-Encoding auslesen XML & JSON 12
Nicer Bestimmten Wert aus einer XML Auslesen XML & JSON 34
L XML Daten auslesen und in Tabelle (Array) speichern XML & JSON 1
L XML Dokument auslesen funktioniert nicht richtig XML & JSON 2
C Attributwert aus XML auslesen XML & JSON 10
H XML String auslesen XML & JSON 4
E XML Knoten mit rekursiver Methode auslesen XML & JSON 3
S Dom Baum auslesen XML & JSON 12
J Properties auslesen (Jar) XML & JSON 1
S auslesen XML & JSON 9
Z XML auslesen, Elemente daraus entfernen und als neue XML zurückgeben XML & JSON 2
M XMI-Datei auslesen XML & JSON 4
T EXSD auslesen mit XPath und JDOM XML & JSON 8
M XML-Datum als Referenz auf Objekt-Variable auslesen XML & JSON 5
Spot84 xmi auslesen XML & JSON 20
G Welche Klassen zum erzeugen/auslesen eines XML Files verwend XML & JSON 9
G Xml File schematisch auslesen XML & JSON 2
P NullPointerException beim Auslesen XML & JSON 8
N XML-String in MIDP auslesen XML & JSON 3
H mit JDOM Verarbeitungsanweisungen und Kommentare auslesen XML & JSON 2
K XML auslesen (simpel) XML & JSON 10
X XML File auslesen/parsen u. in ne Hashmap speichern XML & JSON 2
HeRaider Definitionen auslesen und Encoding XML & JSON 3
A SVG Datei auslesen und Batik XML & JSON 1
M XML werte auslesen ! XML & JSON 3
M XML File während Applet-Start auslesen? XML & JSON 10

Ähnliche Java Themen

Neue Themen


Oben