2010-09-16 82 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命令运行它。