0

こんにちは、私は Java-XML 解析の世界にまったく慣れていないので、XML ファイルの読み取りと書き込みの両方が必要なため、StaX API がおそらく最善の策であることがわかりました。さて、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 処理に最適な API です。ただし、これは最も単純なXML API ではありません。DOM ベースの API から始めて、DOM を使用してパフォーマンスの問題が発生した場合にのみ StAX を使用することをお勧めします。StAX を使用する場合は、代わりに (これも簡単な API) を使用することをお勧めしますXMLEventReaderXMLStreamReader

最後に、例外の詳細を非表示にしたり (例: それらをキャッチして、例外自体を含まないものを出力したり)、それらを無視したりしないでください (例: 例外がスローされた後、問題に対処しようとせずに処理を続行します)。

于 2012-08-21T18:53:10.620 に答える