I have an XML file located at a location such as
http://example.com/test.xml
I\'m trying to parse the XML file to use it in my program with
Try using URLConnection.getInputStream()
for getting the handle of XML file.
See the below code, in that I am trying to open an xml file and printing all the description
fields:
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
public class HTTPXMLTest
{
public static void main(String[] args)
{
try {
new HTTPXMLTest().start();
} catch (Exception e) {
e.printStackTrace();
}
}
private void start() throws Exception
{
URL url = new URL("http://localhost:8080/AutoLogin/resource/web.xml");
URLConnection connection = url.openConnection();
Document doc = parseXML(connection.getInputStream());
NodeList descNodes = doc.getElementsByTagName("description");
for(int i=0; i<descNodes.getLength();i++)
{
System.out.println(descNodes.item(i).getTextContent());
}
}
private Document parseXML(InputStream stream)
throws Exception
{
DocumentBuilderFactory objDocumentBuilderFactory = null;
DocumentBuilder objDocumentBuilder = null;
Document doc = null;
try
{
objDocumentBuilderFactory = DocumentBuilderFactory.newInstance();
objDocumentBuilder = objDocumentBuilderFactory.newDocumentBuilder();
doc = objDocumentBuilder.parse(stream);
}
catch(Exception ex)
{
throw ex;
}
return doc;
}
}
Here is the simple example for getting data form this string "http://www.gettingagile.com/feed/rss2/"
public class MainClassXml {
public static void main(String args[]) throws URISyntaxException,
ClientProtocolException, IOException, MalformedURLException {
String url = "http://www.gettingagile.com/feed/rss2/";
System.out.println("Url is careated****");
URL url2 = new URL(url);
HttpGet httpGet = new HttpGet(url);
HttpClient httpClient = new DefaultHttpClient();
HttpResponse httpResponse = httpClient.execute(httpGet);
HttpEntity entity = httpResponse.getEntity();
System.out.println("Entity is*****" + entity);
try {
String xmlParseString = EntityUtils.toString(entity);
System.out.println("This Stirng to be Pasrse***" + xmlParseString);
HttpURLConnection connection = (HttpURLConnection) url2
.openConnection();
InputStream inputStream = connection.getInputStream();
DocumentBuilderFactory builderFactory = DocumentBuilderFactory
.newInstance();
DocumentBuilder documentBuilder = builderFactory
.newDocumentBuilder();
Document document = documentBuilder.parse(inputStream);
document.getDocumentElement().normalize();
System.out.println("Attributes are***" + document.getAttributes());
NodeList nodeList = document.getElementsByTagName("rss");
System.out.println("This is firstnode" + nodeList);
for (int getChild = 0; getChild < nodeList.getLength(); getChild++) {
Node Listnode = nodeList.item(getChild);
System.out.println("Into the for loop"
+ Listnode.getAttributes().getLength());
Element firstnoderss = (Element) Listnode;
System.out.println("ListNodes" + Listnode.getAttributes());
System.out.println("This is node list length"
+ nodeList.getLength());
Node Subnode = nodeList.item(getChild);
System.out.println("This is list node" + Subnode);
System.out.println("rss attributes***************");
}
} catch (Exception exception) {
System.out.println("Exception is" + exception);
}
}
File fileXml = new File(url);
DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document document = parser.parse(fileXml);
it should go
It's much easier with a XMLPullParser ... you don't have to deal with this event stuff and can quickly pick up some keywords ... I'm using it too ... only a couple of code lines :)
http://developer.android.com/reference/org/xmlpull/v1/XmlPullParser.html
Regarding HTTP and files have a look here Download a file with DefaultHTTPClient and preemptive authentication
A little more detail, based on laz answer:
String urlString = "http://example.com/test.xml";
URL url = new URL(urlString);
Document doc = builder.parse(url);
Get rid of the new File()
:
Document doc = builder.parse(url);