简体   繁体   English

如何使用SAX解析器使用二进制数据元素解析XML文件?

[英]How to parse XML file, with a binary data element using SAX parser?

I receive XML files that need parsing. 我收到需要解析的XML文件。 I code in java regularly, so java SAX was my natural first choice. 我定期用Java编写代码,因此Java SAX是我自然的首选。 The XML files have a combination of text elements and one binary element (.xls file). XML文件具有文本元素和一个二进制元素(.xls文件)的组合。

My parser handler is as: 我的解析器处理程序为:

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;
        }


    }

And the element data is parsed here: 元素数据在这里解析:

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;
        }

    }

}

The problem is with the blob element, its being read in as a char[] (which I believe is incorrect ) ... because that's what they parent class allow to override during event processing. 问题在于blob元素,将其作为char []读取(我认为这是不正确的)...,因为这是它们的父类允许在事件处理期间覆盖的内容。

Does anybody know how to use the SAX parse when one element, is not text but binary instead? 有谁知道当一个元素不是文本而是二进制时,如何使用SAX解析吗?

Greatly appreciated 不胜感激

提取char数据并将其发送到Base64解码器

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM