我编写了一个程序,它读入一个File对象(实际上是一个XML文件)来解析我想要的信息。我有一个示例程序,基本上只是从网络转储数据(下面显示一个网页的程序)。我想在访问Web时使用以下代码,使用命令行使用当前的xml解析器解析该数据。就像我做的那样
java xmlParser http://www.engadget.com/rss.xml
然后程序将解析该feed并以漂亮的格式显示我想要的字段。首先,那是否有点可笑?我只是通过命令行打开网页而不是下面的内容。
其次,如何从网络中获取此Feed并使我的程序解析它,因为它当前只解析硬编码的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());
}
}
}
答案 0 :(得分: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
最终会成为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
作为输入。从InputStream
获取url.openStream()
并将其传递给XML阅读器并发送。无需保存到临时文件或类似的任何环形。
答案 1 :(得分: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命令运行它。