[英]Cannot work with XML file. InputStream is null
我在这里做错了什么? 我收到错误消息,情况并非如此,输入流中没有任何内容。 该文件在那里,并且标题正确。 我想获取我放入XML文件中的IP地址。 有没有一种更好的方法来解析文件而不是dBuilder.parse(XMLReader.class.getResourceAsStream("C:\\\\Tools\\\\CLA\\\\test.xml"));
?
我遇到此异常:
Caused by: java.lang.IllegalArgumentException: InputStream cannot be null
at javax.xml.parsers.DocumentBuilder.parse(Unknown Source)
at com.Intel.ameier.XMLparser.TryXML(XMLparser.java:17)
这是代码:
import java.io.IOException;
import org.xml.sax.*;
import org.w3c.dom.*;
import javax.xml.parsers.*;
public class XMLparser {
protected void TryXML() throws ParserConfigurationException, SAXException, IOException{
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = builderFactory.newDocumentBuilder();
Document document = dBuilder.parse(XMLReader.class.getResourceAsStream("C:\\Tools\\test.xml"));
document.normalize();
NodeList rootNodes = document.getElementsByTagName("info");
Node rootNode = rootNodes.item(0);
Element rootElement = (Element)rootNode;
NodeList compList = rootElement.getElementsByTagName("computer");
for(int i = 0;i < compList.getLength(); i++){
Node computer = compList.item(i);
Element compElement = (Element)computer;
Node theIP = compElement.getElementsByTagName("ipaddress").item(0);
Element theIpElement = (Element)theIP;
System.out.println("The comptuer ip is : " + theIpElement.getTextContent());
}
}
}
XML档案:
<?xml version="1.0"?>
<info>
<testsuite>
<name></name>
</testsuite>
<computer>
<ipaddress>111.11.11.6</ipaddress>
</computer>
<computer>
<ipaddress>111.11.11.5</ipaddress>
</computer>
<computer>
<ipaddress>111.11.11.3</ipaddress>
</computer>
</info>
这与XML无关。 您正在使用Class.getResourceAsStream
,其目的是从该类的类加载器的类路径中获取资源...但是要传递的是文件名 。
如果要为文件创建输入流,只需使用FileInputStream
:
Document document = dBuilder.parse(new FileInputStream("C:\\Tools\\test.xml"));
或更妙的是,为了关闭流:
Document document:
try (InputStream stream = new FileInputStream("C:\\Tools\\test.xml")) {
document = dBuilder.parse(stream);
}
确实与XML无关,并且Jon的回答令人满意。
但是,这种解释是不准确的。 可以使用Class.getResourceAsStream
加载任意文件。 在某些情况下, Class.getResourceAsStream
是加载资源的首选方式。
这里的问题是Class.getResourceAsStream()
将其参数解释为相对于类路径中的每个路径,并且不了解在此处传递的绝对路径。 它只能“查看”类路径中的文件。
您可以尝试将C:\\Tools\\CLA
到类路径中,然后使用
getResourceAsStream("/test.xml");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.