首页 文章

如何使用StaX

提问于
浏览
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>

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的apis开始,如果你遇到使用DOM的性能问题,那么只能使用StAX . 如果你坚持使用StAX,我建议使用 XMLEventReader 而不是 XMLStreamReader (再次,更简单的api) .

    最后,不要隐藏异常细节(例如捕获它们并打印出不包含异常本身的东西)或忽略它们(例如在抛出异常后继续处理而不试图处理问题) .

相关问题