XML von URL lesen

y0dA

Erfahrenes Mitglied
hi!
folgendes szenario: Ich habe ein Webservice erstellt welches mittels der google map geocodierung mir ein XML sendet mit den gewünschten geodaten (abhängig wie man die adresse eingibt). nun möchte ich nicht dass ich diesen response der geokodierung nicht als string bearbeite sondern mir gleich als xml zur verfügung steht - nur habe ich keinen plan wie ich das realisieren kann (gibts hierfür java klassen?streamsource?).

Snippet:
Code:
	private String doGoogleGeocode(final String sQuery) {
		//http://localhost:8080/
		String key = "mein key";
		StringBuffer sb = new StringBuffer();
		try {
			URL url = new URL("url für geokodierung");
			BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
			String inputLine;
			
			while ((inputLine = in.readLine()) != null) {
				sb.append(inputLine);
			}
			in.close();
			
		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return sb.toString();
	}
Hier wird eben momentan mittels inputstreamreader gearbeitet - kann ich hier irgendwie so lesen damit ich ein xml bekomme, damit die methode dann auch gleich ein xml zurückgibt?

mfg
 
Hier etwas ähnliches...

Code:
public XMLImageReader(String myfile)
	{
		File f = new File(myfile);
		System.out.println(f.getPath());
		System.out.println("[XMLImageReader] myfile: "+myfile);
		URL url = getClass().getResource(myfile);
		System.out.println("[XMLImageReader] url.toString(): "+url.toString());
		//myXmlFile = new File (url.getFile());
		//System.out.println("[XMLImageReader] myXmlFile: "+myXmlFile.getPath());
		try
		{
			doc = builder.build(url);
			root = doc.getRootElement();
		} catch (JDOMException e)
		{
			e.printStackTrace();
		} catch (IOException e)
		{
			e.printStackTrace();
		}
		
	}
 
k ich habe folgenden String vorliegen und möchte den nun parsen, wie gehe ich hierbei am besten vor (datei erzeugen und string reinschreiben und dann aus xml file parsen?).

so sieht der String bspw. aus:

<?xml version="1.0" encoding="UTF-8" ?>
- <kml xmlns="http://earth.google.com/kml/2.0">
- <Response>
<name>Eduard-Rösch-Straße,Austria</name>
- <Status>
<code>200</code>
<request>geocode</request>
</Status>
- <Placemark id="p1">
<address>Eduard-Rösch-Straße, 2000 Stockerau, Austria</address>
- <AddressDetails Accuracy="6" xmlns="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0">
- <Country>
<CountryNameCode>AT</CountryNameCode>
- <AdministrativeArea>
<AdministrativeAreaName>Niederösterreich</AdministrativeAreaName>
- <SubAdministrativeArea>
<SubAdministrativeAreaName>Korneuburg</SubAdministrativeAreaName>
- <Locality>
<LocalityName>Stockerau</LocalityName>
- <Thoroughfare>
<ThoroughfareName>Eduard-Rösch-Straße</ThoroughfareName>
</Thoroughfare>
- <PostalCode>
<PostalCodeNumber>2000</PostalCodeNumber>
</PostalCode>
</Locality>
</SubAdministrativeArea>
</AdministrativeArea>
</Country>
</AddressDetails>
- <Point>
<coordinates>16.223300,48.386463,0</coordinates>
</Point>
</Placemark>
</Response>
</kml>
 
Hallo,

du musst es nicht erst in eine Datei schreiben. Du kannst es direkt aus dem String parsen.

SAX-Parser
Java:
package de.tutorials.xml;

import java.io.StringReader;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class XMLStringParserExample {

	public static void main(String[] args) {
		String s = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?><kml xmlns=\"http://earth.google.com/kml/2.0\">"
				+ "<test></test></kml>";

		SAXParserFactory factory = SAXParserFactory.newInstance();

		try {
			SAXParser parser = factory.newSAXParser();

			parser.parse(new InputSource(new StringReader(s)), new MyHandler());

		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

class MyHandler extends DefaultHandler {

	@Override
	public void startElement(String uri, String localName, String qName,
			Attributes attributes) throws SAXException {
		System.out.println(qName);
	}

}


DOM-Parser
Java:
package de.tutorials.xml;

import java.io.StringReader;

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

import org.w3c.dom.Document;
import org.xml.sax.InputSource;

public class XMLStringParserExample {

	public static void main(String[] args) {
		String s = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?><kml xmlns=\"http://earth.google.com/kml/2.0\">"
				+ "<test></test></kml>";

		DocumentBuilder builder;
		try {
			builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
			Document d = builder.parse(new InputSource(new StringReader(s)));
			
			
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	

		
	}

}

MFG

zEriX
 
Zuletzt bearbeitet:
Super Danke!

Ist hoffentlich damit geklärt.

mfg

**EDIT**
Also bei dem DOM Beispiel ist bei mir das Dokument null - oder check ichs nur einfach nit?
 
Zuletzt bearbeitet:
Hallo,

schau mal hier

Java:
package de.tutorials.xml;

import java.io.StringReader;

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

import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;

public class DOMXMLStringParserExample {

	public static void main(String[] args) {
		String s = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?><kml xmlns=\"http://earth.google.com/kml/2.0\">"
				+ "<test>testInhalt</test></kml>";

		DocumentBuilder builder;
		try {
			builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
			Document d = builder.parse(new InputSource(new StringReader(s)));
			NodeList nl = d.getChildNodes();
			travers(nl);
			
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	private static void travers(NodeList nl){
		for (int i = 0, n = nl.getLength(); i < n; i++) {
			System.out.println(nl.item(i).getNodeName());
			System.out.println(nl.item(i).getTextContent());
			travers(nl.item(i).getChildNodes());
		}		
	}
}


MFG

zEriX
 
danke, hab nun aber schon mit SAX mein Problem behoben (aber für die Zukunft gut zu wissen).

mfg
 
Zurück