2010-09-16 50 views
1

我寫了一個程序,讀入一個File對象(真的是一個XML文件)來解析我想要的信息。我有一個示例程序,基本上只是從網上轉儲數據(下面的程序顯示一個網頁)。我想在下面的代碼中使用下面的代碼來訪問網絡,用命令行來解析這些數據和我的當前XML解析器。就像如果我沒有在Java中訪問Web,命令行參數?

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

然後程序會分析我想在一個不錯的格式,飼料和顯示器只等領域。首先,這是否是可靠的?我無法通過命令行打開網頁,而不是下面的內容。

其次,我如何從網上獲取這個提要,並讓我的程序解析它,因爲它目前只是解析一個硬編碼的XML文件。雖然不是一個優雅的解決方案,但我可以看到可能將數據從Web寫入XML文件並使用XML解析器解析。有什麼想法嗎?謝謝。

代碼:如果你不使用任何命令行參數運行

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()); 
     } 
    } 
} 

回答

2

你的程序正常工作:

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> 
... 

唯一的問題是,你只有URL如果args.length == 0創建。如果您在命令行上傳遞URL,那麼url最終會變成null

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

定影是很容易的:

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

關於你的第二個問題,你的XML解析器很可能會接受InputStream S作爲輸入。拿InputStreamurl.openStream()得到,並將它傳遞給你的XML閱讀器和voilà。不需要保存到臨時文件或任何類似迂迴的文件。

0

你可以在Scala中嘗試相同的東西。這裏就是整個程序:

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有極好的原生XML支持,所以你可以繼續使用的值的「RSS」做的XPath一樣操作,漂亮的打印等

你的Scala程序將編譯爲標準的.class文件,因此如果需要,可以使用java命令運行它。