0

大家好,我是 Java-XML 解析领域的新手,发现 StaX API 可能是我最好的选择,因为我需要读取和写入 XML 文件。好的,所以我有一个非常短(并且应该非常简单)的程序,它(应该)创建一个 XMLInputFactory 并使用它来创建一个 XMLStreamReader。XMLStreamReader 是使用附加到与源文件相同目录中的 XML 文件的 FileInputStream 创建的。然而,即使正确编译了 FileInputStream,XMLInputFactory 也无法访问它,并且如果没有 FileInputStream,它也无法创建 XMLStreamReader。请帮忙,因为我不知道该做什么,并且沮丧到要放弃!

import javax.xml.stream.*;
import java.io.*;
public class xml {
    static String status;
    public static void main(String[] args) {
        status = "Program has started";
        printStatus();      
        XMLInputFactory inFactory = XMLInputFactory.newInstance();
            status = "XMLInputFactory (inFactory) defined"; printStatus();
        try { FileInputStream fIS = new FileInputStream("stax.xml"); }
            catch (FileNotFoundException na) { System.out.println("FileNotFound"); }
            status = "InputStream (fIS) declared"; printStatus();
        try { XMLStreamReader xmlReader = inFactory.createXMLStreamReader(fIS); } catch (XMLStreamException xmle) { System.out.println(xmle); }
            status = "XMLStreamReader (xmlReader) created by 'inFactory'"; printStatus();
    }
    public static void printStatus(){ //this is a little code that send notifications when something has been done
        System.out.println("Status: " + status);
    }
}

如果需要,这里还有 XML 文件:

<?xml version="1.0"?>
    <dennis>
        <hair>brown</hair>
        <pants>blue</pants>
        <gender>male</gender>
    </dennis>
4

1 回答 1

0

您的问题与基本的 java 编程有关,与 stax 无关。您的 FileInputStream 位于 try 块内(一些体面的代码格式会有所帮助),因此对于您尝试创建 XMLStreamReader 的代码不可见。带格式:

    XMLInputFactory inFactory = XMLInputFactory.newInstance();
    try {
        // fIS is only visible within this try{} block
        FileInputStream fIS = new FileInputStream("stax.xml");
    } catch (FileNotFoundException na) {
        System.out.println("FileNotFound");
    }
    try {
        // fIS is not visible here
        XMLStreamReader xmlReader = inFactory.createXMLStreamReader(fIS);
    } catch (XMLStreamException xmle) {
        System.out.println(xmle);
    }

另一方面,StAX 是一个不错的 API,并且非常适合在 java 中进行高性能 XML 处理。然而,它并不是最简单的XML api。您可能最好从基于 DOM 的 API 开始,并且仅在使用 DOM 遇到性能问题时才使用 StAX。如果您确实留在 StAX,我建议您使用XMLEventReader而不是XMLStreamReader(再次,更简单的 api)。

最后,不要隐藏异常详细信息(例如捕获它们并打印出不包括异常本身的内容)或忽略它们(例如在抛出异常后继续处理而不尝试处理问题)。

于 2012-08-21T18:53:10.620 回答