Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/205.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sax解析器xml字符串Java Android_Java_Android - Fatal编程技术网

Sax解析器xml字符串Java Android

Sax解析器xml字符串Java Android,java,android,Java,Android,你好 我想在Java Android中遇到的一个问题上得到一些帮助 SAXParser saxParser = saxParserFactory.newSAXParser(); Parse_xml parseXMLClass = new Parse_xml(); saxParser.parse(new InputSource(new StringReader(message_posted)), parseXMLClass); 首先,我读取一个XML字符串值​​对于每个标签 获取值​​rig

你好

我想在Java Android中遇到的一个问题上得到一些帮助

SAXParser saxParser = saxParserFactory.newSAXParser(); 
Parse_xml parseXMLClass = new Parse_xml(); 
saxParser.parse(new InputSource(new StringReader(message_posted)), parseXMLClass);
首先,我读取一个XML字符串值​​对于每个标签

获取值​​right读取标记,如果有人知道如何感谢您的帮助,则9个字符串中只有9个收到部分读取

然后,我展示了我用来阅读XML的代码

SAXParser saxParser = saxParserFactory.newSAXParser(); 
Parse_xml parseXMLClass = new Parse_xml(); 
saxParser.parse(new InputSource(new StringReader(message_posted)), parseXMLClass);
以下是读取标记的类:

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

if (localName.equalsIgnoreCase("MSG"))
    {
        if (listMSG == null)
        {
            listMSG = new ArrayList<MSG>();

        }
    }

    if (localName.equalsIgnoreCase("Delete"))
    {
        if (listMSG == null)
        {
            listMSG = new ArrayList<MSG>();

        }
    }

    if (localName.equalsIgnoreCase("Clear"))
    {
        if (listMSG == null)
        {
            listMSG = new ArrayList<MSG>();

        }
    }

    if (localName.equalsIgnoreCase("ID"))
    {
        bID = true;
    }
    if (localName.equalsIgnoreCase("DESTINATION"))
    {
        bDestination = true;
    }
    if (localName.equalsIgnoreCase("SOURCE"))
    {
        bSource = true;
    }
    if (localName.equalsIgnoreCase("DATE"))
    {
        bDate = true;
    }
    if (localName.equalsIgnoreCase("SUBJECT"))
    {
        bSubject = true;
    }
    if (localName.equalsIgnoreCase("BODY"))
    {
        bMessage = true;
    }
    if (localName.equalsIgnoreCase("SMS"))
    {
        bType = true;
    }
    if (localName.equalsIgnoreCase("TTL"))
    {
        config = new Configuration();
        bTtl = true;
    }
    if (localName.equalsIgnoreCase("ATTEMPTS"))
    {
        bAttempet = true;
    }

    if (localName.equalsIgnoreCase("SMTP"))
    {
        bSmtp = true;
    }
    if (localName.equalsIgnoreCase("PORT"))
    {
        bPort = true;
    }
    if (localName.equalsIgnoreCase("USERNAME"))
    {
        bUsername = true;
    }
    if (localName.equalsIgnoreCase("PASSWORD"))
    {
        bPass = true;
    }
    if (localName.equalsIgnoreCase("EMAIL"))
    {
        bEmail = true;
    }
    if (localName.equalsIgnoreCase("STATUS"))
    {
        bStatus = true;
    }
}

@Override
public void endElement(String uri, String localName, String qName)
        throws SAXException
{
    if (localName.equalsIgnoreCase("MSG"))
    {
        listMSG.add(msg);
        msg = new MSG();
    }
    if (localName.equalsIgnoreCase("DELETE"))
    {
        listMSG.add(msg);
        msg = new MSG();
    }
    if (localName.equalsIgnoreCase("Clear"))
    {
        listMSG.add(msg);
        msg = new MSG();
    }

}

@Override
public void characters(char ch[], int start, int length)
        throws SAXException
{
     */
    if (bID)
    {
        String id=String.copyValueOf(ch, start, length).trim();
        msg.setId(Integer.parseInt(id));
        bID = false;
    }
    if (bDestination)
    {
        String destinaton=String.copyValueOf(ch, start, length).trim();
        msg.setDestination(destinaton);
        bDestination = false;
    }
    if (bSource)
    {
        String source=String.copyValueOf(ch, start, length).trim();
        msg.setSource(source);
        bSource = false;
    }
    if (bDate)
    {
        String date=String.copyValueOf(ch, start, length).trim();
        msg.setDate(date);
        bDate = false;
    }
    if (bSubject)
    {
        String subject=String.copyValueOf(ch, start, length).trim();;
        msg.setSubject(subject);
        bSubject = false;
    }
    if (bMessage)
    {
        String body=String.copyValueOf(ch, start, length).trim();
        msg.setbody(body);
        bMessage = false;
    }
    if (bType)
    {
        String type=String.copyValueOf(ch, start, length).trim();
        msg.setType(Integer.parseInt(type));
        bType = false;
    }
    if (bStatus)
    {
        String status=String.copyValueOf(ch, start, length).trim();
        msg.setStatus(Integer.parseInt(status));
        bStatus = false;
    }
    if (bTtl)
    {
        String ttl=String.copyValueOf(ch, start, length).trim();
        config.setTtl(Integer.parseInt(ttl));
        bTtl = false;
    }
    if (bAttempet)
    {
        String attempt=String.copyValueOf(ch, start, length).trim();
        config.setAttempt(Integer.parseInt(attempt));
        bAttempet = false;
    }
    if (bSmtp)
    {
        String smtp=String.copyValueOf(ch, start, length).trim();
        config.setSmtp(smtp);
        bSmtp = false;
    }
    if (bPort)
    {
        String porta=String.copyValueOf(ch, start, length).trim();
        config.setPorta(Integer.parseInt(porta));
        bPort = false;
    }
    if (bUsername)
    {
        String username=String.copyValueOf(ch, start, length).trim();
        config.setUsername(username);
        bUsername = false;
    }
    if (bPass)
    {
        String pass=String.copyValueOf(ch, start, length).trim();
        config.setPass(pass);
        bPass = false;
    }
    if (bEmail)
    {
        String email=String.copyValueOf(ch, start, length).trim();
        config.setEmail(email);
        bEmail = false;
    }


}
public void startElement(字符串uri、字符串localName、字符串qName、,
属性)引发SAX异常
{
if(localName.equalsIgnoreCase(“MSG”))
{
if(listMSG==null)
{
listMSG=新的ArrayList();
}
}
if(localName.equalsIgnoreCase(“删除”))
{
if(listMSG==null)
{
listMSG=新的ArrayList();
}
}
if(localName.equalsIgnoreCase(“清除”))
{
if(listMSG==null)
{
listMSG=新的ArrayList();
}
}
if(localName.equalsIgnoreCase(“ID”))
{
出价=真实;
}
if(localName.equalsIgnoreCase(“目的地”))
{
b目标=真;
}
if(localName.equalsIgnoreCase(“源”))
{
b来源=真;
}
if(localName.equalsIgnoreCase(“日期”))
{
bDate=真;
}
if(localName.equalsIgnoreCase(“主题”))
{
b subject=true;
}
if(localName.equalsIgnoreCase(“主体”))
{
b消息=真;
}
if(localName.equalsIgnoreCase(“SMS”))
{
b类型=真;
}
if(localName.equalsIgnoreCase(“TTL”))
{
config=新配置();
bTtl=真;
}
if(localName.equalsIgnoreCase(“尝试”))
{
bAttempet=真;
}
if(localName.equalsIgnoreCase(“SMTP”))
{
bSmtp=真;
}
if(localName.equalsIgnoreCase(“端口”))
{
b波特=真;
}
if(localName.equalsIgnoreCase(“用户名”))
{
bUsername=true;
}
if(localName.equalsIgnoreCase(“密码”))
{
bPass=真;
}
if(localName.equalsIgnoreCase(“电子邮件”))
{
bEmail=true;
}
if(localName.equalsIgnoreCase(“状态”))
{
b状态=真;
}
}
@凌驾
公共void endElement(字符串uri、字符串localName、字符串qName)
抛出SAX异常
{
if(localName.equalsIgnoreCase(“MSG”))
{
添加(msg);
msg=新msg();
}
if(localName.equalsIgnoreCase(“删除”))
{
添加(msg);
msg=新msg();
}
if(localName.equalsIgnoreCase(“清除”))
{
添加(msg);
msg=新msg();
}
}
@凌驾
公共无效字符(字符ch[],整数开始,整数长度)
抛出SAX异常
{
*/
如果(投标)
{
String id=String.copyValueOf(ch,start,length).trim();
msg.setId(Integer.parseInt(id));
出价=假;
}
如果(b目标)
{
String destinaton=String.copyValueOf(ch,start,length).trim();
msg.setDestination(目的地);
b目标=错误;
}
如果(b源)
{
String source=String.copyValueOf(ch,start,length).trim();
msg.setSource(source);
b来源=假;
}
如果(b日期)
{
String date=String.copyValueOf(ch,start,length).trim();
msg.setDate(日期);
bDate=假;
}
if(b主题)
{
String subject=String.copyValueOf(ch,start,length).trim();;
msg.setSubject(主题);
b主体=假;
}
如果(b消息)
{
String body=String.copyValueOf(ch,start,length).trim();
msg.setbody(body);
b消息=假;
}
如果(b类型)
{
字符串类型=String.copyValueOf(ch,start,length).trim();
msg.setType(Integer.parseInt(type));
b类型=假;
}
如果(b状态)
{
字符串状态=String.copyValueOf(ch,start,length).trim();
msg.setStatus(Integer.parseInt(status));
b状态=假;
}
如果(bTtl)
{
String ttl=String.copyValueOf(ch,start,length).trim();
config.setTtl(Integer.parseInt(ttl));
bTtl=假;
}
if(Battempe)
{
字符串尝试=String.copyValueOf(ch,start,length).trim();
config.settrunt(Integer.parseInt(trunt));
bAttempet=假;
}
如果(bSmtp)
{
String smtp=String.copyValueOf(ch,start,length).trim();
config.setSmtp(smtp);
bSmtp=假;
}
如果(b端口)
{
String porta=String.copyValueOf(ch,start,length).trim();
config.setPorta(Integer.parseInt(porta));
bPort=false;
}
if(bUsername)
{
String username=String.copyValueOf(ch,start,length).trim();
config.setUsername(用户名);
bUsername=false;
}
如果(bPass)
{
String pass=String.copyValueOf(ch,start,length).trim();
config.setPass(pass);
bPass=假;
}
如果(bEmail)
{
String email=String.copyValueOf(ch,start,length).trim();
config.setEmail(电子邮件);
bEmail=false;
}
}
也许,它对你有帮助

@Override public void characters(char ch[], int start, int length) throws SAXException { //Your code here, and then... if(bYourLongType) { String yourLongType = String.copyValueOf(ch, start, length).trim(); Long longValue = Long.parseLong(yourLongType); bYourLongType = false; } } @凌驾 公共无效字符(字符ch[],整数开始,整数长度) 抛出SAX异常 { //你的代码在这里,然后。。。 如果(按您的长型){ String yourLongType=String.copyValueOf(ch,start,length).trim(); Long longValue=Long.parseLong(yourLongType); bYourLongType=false; } } 在sax解析器中,characters()方法每次最多只能解析1024个字符。所以我们需要附加字符串,直到所有字符都被解析。看看这个答案

如果有帮助,请告诉我

请查看我的代码

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 ReadXMLFile {

   public static void main(String argv[]) {

    try {

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

    DefaultHandler handler = new DefaultHandler() {

    boolean bfname = false;
    boolean blname = false;
    boolean bnname = false;
    boolean bsalary = false;

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

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

        if (qName.equalsIgnoreCase("FIRSTNAME")) {
            bfname = true;
        }

        if (qName.equalsIgnoreCase("LASTNAME")) {
            blname = true;
        }

        if (qName.equalsIgnoreCase("NICKNAME")) {
            bnname = true;
        }

        if (qName.equalsIgnoreCase("SALARY")) {
            bsalary = 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 (bfname) {
            System.out.println("First Name : " + new String(ch, start, length));
            bfname = false;
        }

        if (blname) {
            System.out.println("Last Name : " + new String(ch, start, length));
            blname = false;
        }

        if (bnname) {
            System.out.println("Nick Name : " + new String(ch, start, length));
            bnname = false;
        }

        if (bsalary) {
            System.out.println("Salary : " + new String(ch, start, length));
            bsalary = false;
        }

    }

     };

       saxParser.parse("c:\\file.xml", handler);

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

   }

}

如果您有任何问题,请告诉我。

您有什么问题?我的问题是当字符串太长时,它会重新出现