大家好,我是 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编程有关,与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 处理。然而,这并不是simplestXML API。您可能最好从基于 DOM 的 api 开始,并且仅在使用 DOM 遇到性能问题时才使用 StAX。如果你do留在StAX,我建议使用XMLEventReader
代替XMLStreamReader
(同样,一个更简单的 api)。
最后,不要隐藏异常详细信息(例如捕获它们并打印出不包含异常本身的内容)或忽略它们(例如在抛出异常后继续处理而不尝试处理问题)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)