xml文件已成功从netbeans解析,但不是从runnable jar解析

时间:2014-05-05 20:48:33

标签: java xml parsing netbeans jar

我开发了一个解析xml文件的代码,并在netbeans的框架中返回结果。代码从netbeans成功运行但是当将项目导出到jar文件时它没有显示任何内容。请知道,如果你有想法,我将感激不尽如果你帮我的话。这是我用来解析的代码。

import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.xml.sax.SAXException;

public class Parsing {


String a = null;

public static void main(String a) throws
        ParserConfigurationException, SAXException, IOException,
        XPathExpressionException {
    a = getElem(a);

}

public static String getElem(String a) throws ParserConfigurationException,   SAXException, XPathExpressionException, IOException {

    String file = "src/xml/read.xml";


    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    dbf.setNamespaceAware(false);
    DocumentBuilder db = dbf.newDocumentBuilder();

    Document doc = db.parse(file);

    XPath xpath = XPathFactory.newInstance().newXPath();
    Node CustomerId = (Node) xpath.evaluate("//Operation[@name='Read' and @modifier='Customer']/ParameterList/StringParameter[@name='CustomerId']/text()",
            doc.getDocumentElement(), XPathConstants.NODE);

    a = CustomerId.getNodeValue();
    return a;
   }
 }

从另一个框架调用方法getElem(a)时,它会向我显示文本框中a的值,但是当将项目导出到jar文件中时,它不会向我显示任何内容!

3 个答案:

答案 0 :(得分:0)

首先让我感到震惊的是使用XML资源的相对路径。您似乎依赖于相对于工作目录的目录中存在文件。

答案 1 :(得分:0)

src目录在运行时不存在。这表明XML文件是一个受管理的资源,因此,如果文件存在于文件系统中,则无法访问该文件。

相反,你想要使用类似......

的东西
getClass().getResourceAsStream("/xml/read.xml")

将结果InputStream传递给DocumentBuilder。别忘了关闭它

答案 2 :(得分:0)

这是使用jar文件修改过的代码:)

  import java.io.IOException;

  import java.io.InputStream;

  import javax.xml.parsers.DocumentBuilder;
  import javax.xml.parsers.DocumentBuilderFactory;
  import javax.xml.parsers.ParserConfigurationException;
  import javax.xml.xpath.XPath;
  import javax.xml.xpath.XPathConstants;
  import javax.xml.xpath.XPathExpressionException;
  import javax.xml.xpath.XPathFactory;

  import org.w3c.dom.Document;
  import org.w3c.dom.Node;
  import org.xml.sax.InputSource;
  import org.xml.sax.SAXException;


  public class Parsing {


String a = null;
private static final String TEST_XML = "/xml/read.xml";

public static void main(String a) throws
        ParserConfigurationException, SAXException, IOException,
        XPathExpressionException {
    a = getElem(a);

}

protected static InputSource getTestXMLInputSource() {
    InputStream is = Parsing.class.getResourceAsStream(TEST_XML);


    is = Parsing.class.getResourceAsStream(TEST_XML);

    return new InputSource(is);
}

public static String getElem(String a) throws ParserConfigurationException, SAXException, XPathExpressionException, IOException {


    final InputSource source = getTestXMLInputSource();

    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    dbf.setNamespaceAware(false);
    DocumentBuilder db = dbf.newDocumentBuilder();

    Document doc = db.parse(source);


    XPath xpath = XPathFactory.newInstance().newXPath();
    Node CustomerId = (Node) xpath.evaluate("//Operation[@name='Read' and @modifier='Customer']/ParameterList/StringParameter[@name='CustomerId']/text()",
            doc.getDocumentElement(), XPathConstants.NODE);

    a = CustomerId.getNodeValue();
    return a;
   }
  }