Синтаксический анализ XML (StAX)| getResourceAsStream из файла XML возвращает ноль

Так что я знаю, что это довольно популярная проблема, однако ни одно из доступных решений не сработало для меня.

Мой код является примером кода для чтения и анализа XML-документа. Оригинальный источник находится по этой ссылке: http://www.studytrails.com/java/xml/woodstox/java-xml-stax-woodstox-basic-parsing.jsp

Относительный путь для моего файла Java

 src\com\parser\xml\TestBasicStaxParsing.java

Входной файл employee.xml находится в той же глубине, что и папка src & bin и файл.classpath.

Кстати, я использую затмение в среде Windows, если это поможет вам.

Ниже приводится файл Java, который я пытаюсь запустить

package com.parser.xml;

import java.io.InputStream;

import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.events.XMLEvent;

import org.codehaus.stax2.XMLInputFactory2;
import org.codehaus.stax2.XMLStreamReader2;

public class TestBasicStaxParsing {

private void execute(String xmlFileName) throws Exception {

    InputStream xmlInputStream = getClass().getResourceAsStream(xmlFileName);
    XMLInputFactory2 xmlInputFactory = (XMLInputFactory2)XMLInputFactory.newInstance();
    XMLStreamReader2 xmlStreamReader = (XMLStreamReader2) xmlInputFactory.createXMLStreamReader(xmlInputStream);
    while(xmlStreamReader.hasNext()){
        int eventType = xmlStreamReader.next();
        switch (eventType) {
        case XMLEvent.START_ELEMENT:
            System.out.print("<"+xmlStreamReader.getName().toString()+">");
            break;
        case XMLEvent.CHARACTERS:
            System.out.print(xmlStreamReader.getText());
            break;
        case XMLEvent.END_ELEMENT:
            System.out.println("</"+xmlStreamReader.getName().toString()+">");
            break;
        default:
            //do nothing
            break;
        }
    }

}

public static void main(String[] args) throws Exception {
    (new TestBasicStaxParsing()).execute("employee.xml");
}

}

Насколько я понимаю, существует несколько альтернатив для следующей строки кода в зависимости от:

  1. Является ли ваша функция статичной или нет.
  2. Расширение вашего входного файла

РЕДАКТИРОВАТЬ

 getClass().getResourceAsStream(xmlFileName)

Но я не уверен, как им следует манипулировать и почему

Какие-либо предложения? заранее спасибо

1 ответ

Как сказано в JavaDoc, нулевое значение происходит в двух случаях: - null xmlFileName (поэтому убедитесь, что вы действительно передаете правильный аргумент) - ресурс не может быть найден.

Во втором случае кажется, что вы пытаетесь получить файл, который находится "рядом" с вашим кодом TestBasicStaxParsing.java в каком-то каталоге под soruce.

Убедитесь, что xmlFileName - это полное имя файла с расширением и без каких-либо других частей пути, например, простой MyFile.xml, а не some ../project/src/com/parser/xml/MyFile.xml;

Убедитесь, что файл действительно скопирован в папку сборки, но в ваш скрипт сборки (поэтому он также должен быть рядом с файлом TestBasicStaxParsing.class)

Другие вопросы по тегам