【问题标题】:How to use StaX如何使用 StaX
【发布时间】:2012-08-17 04:02:25
【问题描述】:

大家好,我是 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>

【问题讨论】:

标签: java xml inputstream stax fileinputstream


【解决方案1】:

您的问题与基本的 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 处理的一个很好的 API。然而,它并不是最简单 XML api。从基于 DOM 的 api 开始可能会更好,并且只有在使用 DOM 时遇到性能问题时才使用 StAX。如果您确实继续使用 StAX,我建议您使用 XMLEventReader 而不是 XMLStreamReader(同样,更简单的 api)。

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

【讨论】:

  • 那么我必须做些什么才能使 XMLStreamReader 可以看到 fIS?您还推荐了 DOM……DOM 是否允许读取和写入 XML 文件?
  • @Guitarroka - 您需要更改fIS 变量的范围(谷歌“java 变量范围”)。是的,DOM 可以读写 xml(谷歌“java DOM 教程”)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-30
  • 2012-02-20
  • 1970-01-01
  • 1970-01-01
  • 2011-07-02
  • 1970-01-01
  • 2016-03-27
相关资源
最近更新 更多