Java SAXParser-对XML元素的值进行解码后,只获得字符长度126

Java SAXParser-对XML元素的值进行解码后,只获得字符长度126,java,xml-parsing,sax,saxparser,Java,Xml Parsing,Sax,Saxparser,我试图使用SAXParser从如下所示的xml中的元素“UserDetails”获取编码字符。我只能得到长度为126的前两行编码字符。我无法得到所有的编码字符。有没有办法找回那些角色 **User.xml** <UserStatus>FALSE</UserStatus> <UserDetails> **AAAAAAAA//8BAAAAAAAAAAEAAQAAAP///f///wAAAQAAAAAAAgABAAIAAQAAAAAA//8CAAAAAAABAP/

我试图使用SAXParser从如下所示的xml中的元素“UserDetails”获取编码字符。我只能得到长度为126的前两行编码字符。我无法得到所有的编码字符。有没有办法找回那些角色

**User.xml**

<UserStatus>FALSE</UserStatus>
<UserDetails>
**AAAAAAAA//8BAAAAAAAAAAEAAQAAAP///f///wAAAQAAAAAAAgABAAIAAQAAAAAA//8CAAAAAAABAP////8A
AAAA//8AAP////8AAAAA/////wAA//////3//f/9//7//v/9/wAA/f/8//z//P/8//3//v/+//7//P/9//3/**
/P/7//r/+//8//v/+//6//r/+//5//n//P/6//r//P/6//n/+P/6//r/+v/6//r/+v/7//z//P/5//r/+v/7
//r/+f/5//r/+v/5//r/+f/5//r/+//6//n/9//3//n/+f/5//j/9//5//n/+P/5//n/+f/6//f/+P/4//f/
+P/5//j/+f/6//f/9v/2//f/9//3//n/+v/4//n/+f/3//b/9//4//n/9//4//b/9//0//f/9v/3//b/9//2
//T/9f/5//T/9f/2//X/9P/2//b/9v/0//T/8//2//T/9P/0//X/9v/1//f/9P/0//L/8v/y//L/9v/3//b/
9v/2//f/9v/1//X/9f/1//T/9v/3//X/9f/1//b/9v/2//b/9//3//n/9//1//T/8//1//b/9v/3//n/9//1
//T/9P/0//X/9v/0//b/9v/3//b/9v/1//P/9P/1//f/9//2//n/9//3//b/9//3//f/9//4//f/+f/3//b/
9v/0//X/9v/5//n/9//6//f/9//4//f/9//4//j/9//5//n/+f/2//X/9//0//T/9f/2//j/9v/4//b/9f/1
//T/9f/1//f/9v/3//X/9v/2//b/9f/1//T/9f/5//j/+P/4//n/+P/3//b/+P/4//f/9//2//j/+f/2//b/
</UserDetails>
<UserStatus>TRUE</UserStatus>
<UserDetails>
**AAAAAAAA//8BAAAAAAAAAAEAAQAAAP///f///wAAAQAAAAAAAgABAAIAAQAAAAAA//8CAAAAAAABAP////8A
AAAA//8AAP////8AAAAA/////wAA//////3//f/9//7//v/9/wAA/f/8//z//P/8//3//v/+//7//P/9//3/**
/P/7//r/+//8//v/+//6//r/+//5//n//P/6//r//P/6//n/+P/6//r/+v/6//r/+v/7//z//P/5//r/+v/7
//r/+f/5//r/+v/5//r/+f/5//r/+//6//n/9//3//n/+f/5//j/9//5//n/+P/5//n/+f/6//f/+P/4//f/
+P/5//j/+f/6//f/9v/2//f/9//3//n/+v/4//n/+f/3//b/9//4//n/9//4//b/9//0//f/9v/3//b/9//2
//T/9f/5//T/9f/2//X/9P/2//b/9v/0//T/8//2//T/9P/0//X/9v/1//f/9P/0//L/8v/y//L/9v/3//b/
9v/2//f/9v/1//X/9f/1//T/9v/3//X/9f/1//b/9v/2//b/9//3//n/9//1//T/8//1//b/9v/3//n/9//1
//T/9P/0//X/9v/0//b/9v/3//b/9v/1//P/9P/1//f/9//2//n/9//3//b/9//3//f/9//4//f/+f/3//b/
9v/0//X/9v/5//n/9//6//f/9//4//f/9//4//j/9//5//n/+f/2//X/9//0//T/9f/2//j/9v/4//b/9f/1
//T/9f/1//f/9v/3//X/9v/2//b/9f/1//T/9f/5//j/+P/4//n/+P/3//b/+P/4//f/9//2//j/+f/2//b/
</UserDetails>



**UserDetails.java**

import java.io.File;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class UserDetails {

    public static void main(String args[]){

    File file = new File("C:/user_records/User.xml");

    final StringBuffer curCharValue = new StringBuffer(1024);

    try {
        SAXParserFactory factory = SAXParserFactory.newInstance();
        SAXParser saxParser = factory.newSAXParser();

        DefaultHandler handler = new DefaultHandler() {
            String sd = "";
            String createdStr = "";

            boolean stat= false;

            public void startElement(String uri, String localName,
                    String qName, Attributes attributes)
                    throws SAXException {
                curCharValue.setLength(0);
                System.out.println("Start Element :" + qName);

                if (qName.equalsIgnoreCase("UserDetails")) {
                    stat= true;
                }

            }

            public void endElement(String uri, String localName,
                    String qName) throws SAXException {

                System.out.println("End Element : " + qName);

            }

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

                if (stat) {
                    System.out.println("User Details are : "
                            + new String(ch, start, length));

                    curCharValue.append(ch, start, length);

                    byte[] decoded = Base64.decodeBase64(new String(
                            curCharValue));

                    System.out.println(decoded.length
                            + " is decoded length");
                    for (int i = 0; i < decoded.length; i++) {

                        createdStr = decoded[i] + "";
                        if (createdStr.equals("-")
                                || i == (decoded.length - 1)) {
                            sd += decoded[i];
                        } else {
                            sd += decoded[i] + ",";
                        }
                    }

                    System.out.println("the actual user details are : "
                            + sd);
                    stat= false;
                }

            }

        };

        saxParser.parse(file, handler);

    } catch (Exception e) {
        e.printStackTrace();
    }

}
}
**User.xml**
错误的
**AAAAAAAA//8baaaaaaaaaaaaaaaaaaaaaaaaaaap///f///waaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa//8caaaaaaaaaaaaaap///8A
AAAA//8AAP///8AAAAA/////wAA///3//f/9//7//v/9/wAA/f/8//z//P/8//3///v//+///7//P/9//3/**
/P/7//r/++//8//v/++//6//r/++//5//n//P/6//n/+P/6//r/+v/6//r/+v/7//z//P/5//r/+v/7
//r/+f/5//r/+v/5//r/+f/5//r/++/6//n/9//3//n/+f/5//j/9//5//n/+P/5//n/+f/6//f/+P/4//f/
+P/5//j/+f/6//f/9v/2//f/9//3//n/+v/4//n/+f/3//b/9//4//n/9//4//b/9//0//f/9v/3//b/9//2
//T/9f/5//T/9f/2//X/9P/2//b/9v/0//T/8//2//T/9P/0//X/9v/1//f/9P/0//L/8v/y//L/9v/3//b/
9v/2//f/9v/1//X/9f/1//T/9v/3//X/9f/1//b/9v/2//b/9//3//n/9//1//T/8//1//b/9v/3//n/9//1
//T/9P/0//X/9v/0//b/9v/3//b/9v/1//P/9P/1//f/9//2//n/9//3//b/9//3//f/9//4//f/+f/3//b/
9v/0//X/9v/5//n/9//6//f/9//4//f/9//j/9//5//n/+f/2//X/9//0//T/9f/2//j/9v/4//b/9f/1
//T/9f/1//f/9v/3//X/9v/2//b/9f/1//T/9f/5//j/+P/4//n/+P/3//b/+P/4//f/9//2//j/+f/2//b/
真的
**AAAAAAAA//8baaaaaaaaaaaaaaaaaaaaaaaaaaap///f///waaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa//8caaaaaaaaaaaaaap///8A
AAAA//8AAP///8AAAAA/////wAA///3//f/9//7//v/9/wAA/f/8//z//P/8//3///v//+///7//P/9//3/**
/P/7//r/++//8//v/++//6//r/++//5//n//P/6//n/+P/6//r/+v/6//r/+v/7//z//P/5//r/+v/7
//r/+f/5//r/+v/5//r/+f/5//r/++/6//n/9//3//n/+f/5//j/9//5//n/+P/5//n/+f/6//f/+P/4//f/
+P/5//j/+f/6//f/9v/2//f/9//3//n/+v/4//n/+f/3//b/9//4//n/9//4//b/9//0//f/9v/3//b/9//2
//T/9f/5//T/9f/2//X/9P/2//b/9v/0//T/8//2//T/9P/0//X/9v/1//f/9P/0//L/8v/y//L/9v/3//b/
9v/2//f/9v/1//X/9f/1//T/9v/3//X/9f/1//b/9v/2//b/9//3//n/9//1//T/8//1//b/9v/3//n/9//1
//T/9P/0//X/9v/0//b/9v/3//b/9v/1//P/9P/1//f/9//2//n/9//3//b/9//3//f/9//4//f/+f/3//b/
9v/0//X/9v/5//n/9//6//f/9//4//f/9//j/9//5//n/+f/2//X/9//0//T/9f/2//j/9v/4//b/9f/1
//T/9f/1//f/9v/3//X/9v/2//b/9f/1//T/9f/5//j/+P/4//n/+P/3//b/+P/4//f/9//2//j/+f/2//b/
**UserDetails.java**
导入java.io.File;
导入javax.xml.parsers.SAXParser;
导入javax.xml.parsers.SAXParserFactory;
导入org.xml.sax.Attributes;
导入org.xml.sax.SAXException;
导入org.xml.sax.helpers.DefaultHandler;
公共类用户详细信息{
公共静态void main(字符串参数[]){
File File=新文件(“C:/user\u records/user.xml”);
最终StringBuffer curCharValue=新StringBuffer(1024);
试一试{
SAXParserFactory=SAXParserFactory.newInstance();
SAXParser SAXParser=factory.newSAXParser();
DefaultHandler=新的DefaultHandler(){
字符串sd=“”;
字符串createdStr=“”;
布尔统计=假;
public void startElement(字符串uri、字符串localName、,
字符串(名称、属性)
抛出SAX异常{
curCharValue.setLength(0);
System.out.println(“起始元素:+qName”);
if(qName.equalsIgnoreCase(“UserDetails”)){
stat=true;
}
}
public void endElement(字符串uri、字符串localName、,
字符串(qName)引发异常{
System.out.println(“结束元素:+qName”);
}
公共无效字符(字符ch[],整数开始,整数长度)
抛出SAX异常{
如果(统计){
System.out.println(“用户详细信息为:”
+新字符串(ch、起始、长度);
curCharValue.append(ch,start,length);
字节[]decoded=Base64.decodeBase64(新字符串(
curCharValue);
System.out.println(解码长度
+“是解码长度”);
for(int i=0;i
ContentHandler.characters API表示解析器将调用此方法来报告每个字符数据块。SAX解析器可以返回单个块中的所有连续字符数据,也可以将其拆分为多个块

您应该将这些区块收集为一个字符串

字符(char ch[],int start,int length)将被节点UserDetails的解析器调用多次,每次调用时您都必须添加ch[]。您可以将元素start name保留为变量,并使用startElement()的qName进行设置然后检查变量,确保多次调用characters(),但仍然是相同的起始元素