0

xml ファイルの最初のタグを取得し、sax パーサーを使用して対応する終了タグがあることを確認する方法はありますか?

4

4 に答える 4

1

endDocumentを処理するだけで、それが呼び出されれば、整形式です。

于 2012-07-24T15:10:41.813 に答える
1

startElement()、、を処理することも、単にendElement()を処理することもできます。ドキュメントが整形式でない場合は、例外をスローする必要があります。ただし、学習のために、いくつかの例を示します。endDocument()endDocument()endDocument()

public class MyParser extends DefaultHandler {

    private String firstElement;
    private String lastElement;

    public void startElement(String uri, String localName, String name, Attributes attributes) throws SAXException {
        if(firstElement == null) {
            firstElement = name;
        } 
    }
    public void endElement(String uri, String localName, String name) throws SAXException {
        lastElement = name;
    }
    public void endDocument() {
        if(lastElement.equals(firstElement)) {
            // Well formed input
        }
    }
}

すべての要素がスタックで閉じられていることを確認することもできます。

public class MyParser extends DefaultHandler {
    Stack<String> stk;

    //...

    public void startElement(String uri, String localName, String name, Attributes attributes) throws SAXException {
       stk.push(name);
    }  

     public void endElement(String uri, String localName, String name) throws SAXException  {
         if(stk.pop().equals(name)) {
            // Input is well formed for each tag
         }
         else {
            // Not well-formed
         }
     }
}
于 2012-07-24T15:11:40.803 に答える
1

これは、DOM 解析を使用したいように思えます。

sax 解析を使用する場合、実際には、ドキュメント全体を一度に処理 (メモリにロード) したくないと言っています。最初のタグ end (ルート タグ) を検索すると、ドキュメント全体を一度にスキャンすることになり、SAX の利点が失われます。

ドキュメントをロードすると、DOM 解析もスローされ、整形式ではありません。したがって、ルート タグが閉じられているかどうかを手動で確認する必要はありません。

于 2012-07-24T15:14:37.867 に答える
0

SAX パーサーは、タグが開いたり閉じたりしない場合、実際には例外をスローするため、その処理は必要ありません....そのため、XML ファイルが間違っているか破損している場合、SAX パーサーは例外をスローします。

于 2012-07-24T15:33:04.403 に答える