Sax解析器xml字符串Java Android
你好 我想在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
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();
}
}
}
如果您有任何问题,请告诉我。您有什么问题?我的问题是当字符串太长时,它会重新出现