2

解析が必要な XML ファイルを受け取りました。私は定期的に Java でコーディングしているので、Java SAX が私の最初の選択でした。XML ファイルには、テキスト要素と 1 つのバイナリ要素 (.xls ファイル) の組み合わせがあります。

私のパーサーハンドラーは次のとおりです。

public void startElement(String uri, String localName, String qName,
            Attributes attributes) throws SAXException{

        if(qName.equalsIgnoreCase("To")){
           toFlag = true;
        }

        if(qName.equalsIgnoreCase("Subject")){
           subjectFlag = true;
        }

        if(qName.equalsIgnoreCase("OutDocumentId")){
           outdocmentIdFlag = true;
        }

        if(qName.equalsIgnoreCase("Filename")){
           filenameFlag = true;
        }

        if(qName.equalsIgnoreCase("EmailType")){
            emailTypeFlag = true;
        }

        if(qName.equalsIgnoreCase("Context")){
            contextTypeFlag = true;
        }

        if(qName.equalsIgnoreCase("Blob")){
            blobTypeFlag = true;
        }


    }

要素データは次のように解析されます。

public void characters(char ch[], int start, int length) throws SAXException{

        String text = null;
        if (toFlag) {
            text = new String(ch, start, length);
            getRequest().setRecipientEmail(text);
            toFlag = false;
        }

        if (subjectFlag) {
            text = new String(ch, start, length);
            getRequest().setSubject(text);
            subjectFlag = false;
        }

        if (outdocmentIdFlag) {             
            text = new String(ch, start, length);
            getRequest().setOutDocId(text);
            outdocmentIdFlag = false;
        }

        if (filenameFlag) {
            text = new String(ch, start, length);
            getRequest().setFilename(text);
            filenameFlag = false;
        }

        if(emailTypeFlag) {
            text = new String(ch, start, length);
            getRequest().setEmailType(Integer.parseInt(text));
            emailTypeFlag = false;
        }

        if(contextTypeFlag) {
            text = new String(ch, start, length);
            getRequest().setContext(text);
            contextTypeFlag = false;
        }

        if(blobTypeFlag) {
            text = new String(ch, start, length);               
            try {
                getRequest().setBlob(Hibernate.createBlob(text.getBytes("UTF-16")));
            } catch (UnsupportedEncodingException e) {
                     System.out.println("Error creating blob");
                     e.printStackTrace();
            }
            blobTypeFlag = false;
        }

    }

}

問題は blob 要素にあり、char[] として読み込まれます (これは間違っていると思います)。これは、親クラスがイベント処理中にオーバーライドできるためです。

1 つの要素がテキストではなくバイナリである場合に SAX 解析を使用する方法を知っている人はいますか?

大変感謝しています

4

1 に答える 1

1

char データを受け取り、Base64 デコーダーに送信します。

于 2013-01-03T19:11:57.940 に答える