在JAR中封装XML

时间:2015-04-12 19:48:38

标签: java xml intellij-idea

我知道这个问题在互联网上已经asked quite a lot,但我陷入了困境。

问题:

我得到了一些我需要解析的XML文件(OpenStreetMap - .osm)。我解析这些OSM文件的方法如下:( edit-this方法将OSMHandler设置为我的ContentHandler,并在该类中进行实际解析)

void parseOSM(String filename) {
    try {
        XMLReader reader =
                XMLReaderFactory.createXMLReader();
        reader.setContentHandler(
                new OSMHandler()); //extends DefaultHandler
        reader.parse(filename);
    } catch (SAXException | IOException e) {
        throw new RuntimeException(e);
    }
}

当您在IntelliJ中运行应用程序时,这可以正常工作,但现在我需要创建一个只需双击即可运行的.jar。

根据我的理解,我们需要将OSM文件作为资源获取,例如:

InputStream is = getClass().getResourceAsStream(filename);

我不太确定我是如何要求我的OSMHandler解析这个InputStream的,因为parse方法只接受一个String。谁能详细说明从这里做什么?

修改

我确实尝试了以下内容:

void parseOSM_jar(String filename){
    InputStream is = getClass().getResourceAsStream(filename);
    try
    {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document document = builder.parse(is);
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
}

这里的问题是,就我而言,它不会将我的OSMHandler类调用/设置为“解析器”。

最终编辑

现在有效,感谢简单的提示。我只需按如下方式使用InputSource:

void parseOSM(String filename) throws ParserConfigurationException {

    InputStream stream = getClass().getResourceAsStream(filename);
    InputSource input = new InputSource(stream);

    try {
        XMLReader reader =
                XMLReaderFactory.createXMLReader();
        reader.setContentHandler(
                new OSMHandler());
        reader.parse(input);
    } catch (SAXException | IOException e) {
        throw new RuntimeException(e);
    }
}

0 个答案:

没有答案