簡體   English   中英

無法使用XML文件。 InputStream為null

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM