2010-09-16 6 views
1

J'ai écrit un programme qui lit dans un objet File (en fait un fichier XML) pour analyser l'information que je veux. J'ai un exemple de programme pour simplement vider les données du net (le programme ci-dessous affiche une page Web). Je veux utiliser le code ci-dessous pour accéder au web, pour analyser ces données avec mon analyseur XML actuel avec la ligne de commande. Comme si je l'ai faitAccéder au web en Java, argument de ligne de commande?

java xmlParser http://www.engadget.com/rss.xml 

Ensuite, le programme serait analyser cette alimentation et afficher uniquement les champs que je veux dans un format agréable. Premièrement, est-ce poassible? J'ai du mal à ouvrir la page Web via la ligne de commande au lieu de ce que j'ai ci-dessous. Deuxièmement, comment puis-je prendre ce flux à partir du réseau et faire analyser mon programme car il ne fait qu'analyser un fichier XML codé en dur. Bien que n'étant pas une solution élégante, je pourrais voir éventuellement écrire les données du web dans un fichier XML et l'analyser avec mon analyseur XML. Des pensées? Merci.

code:

import java.io.IOException; 
import java.io.InputStream; 
import java.net.URL; 
import java.util.Scanner; 

public class DumpIO { 
    public static void main(String[] args) throws IOException { 
     URL url = null; 
     if (args.length == 0) 
      url = new URL("http://www.engadget.com/rss.xml"); 
     InputStream is = url.openStream(); 
     Scanner in = new Scanner(is); 
     while (in.hasNextLine()) { 
      System.out.println(in.nextLine()); 
     } 
    } 
} 

Répondre

2

Votre programme fonctionne très bien si vous l'exécutez sans ligne de commande args:

jkugelman$ java DumpIO 
<?xml version="1.0"?> 
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" 
    xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" 
> 
<channel> 
... 

Le seul problème est que vous créez seulement le URL si args.length == 0. Si vous passez une URL sur la ligne de commande, url finit par être null.

jkugelman$ java DumpIO http://example.com/ 
Exception in thread "main" java.lang.NullPointerException 
    at DumpIO.main(DumpIO.java:11) 

fixation qui est assez facile:

if (args.length > 0) { 
    url = new URL(args[0]); 
} 
else { 
    url = new URL("http://www.engadget.com/rss.xml"); 
} 

Quant à votre deuxième question, votre analyseur XML acceptera très probablement InputStream s en entrée. Prenez le InputStream vous obtenez de url.openStream() et passez-le à votre lecteur XML et voilà. Pas besoin d'enregistrer dans un fichier temporaire ou quelque chose de rond-point comme ça.

0

Vous pourriez essayer la même chose dans Scala. Voici l'ensemble du programme:

object DumpIO { 
    def main(a: Array[String]) = { 
    val url = if (a.size > 0) a(0) else "http://www.engadget.com/rss.xml" 
    val rss = xml.XML.load(url) 
    println(rss) 
    } 
} 

Scala offre un excellent support XML natif, vous pouvez donc continuer à utiliser la valeur « rss » pour faire XPath comme les opérations, assez d'impression, etc.

Votre programme Scala compilez en fichiers .class standard, vous pouvez donc l'exécuter avec la commande java si nécessaire.

Questions connexes