当前位置: 技术问答>java相关
问一个Sax的问题
来源: 互联网 发布时间:2017-04-19
本文导语: 看了ccidnet上关于sax的文章 http://developer.ccidnet.com/pub/disp/Article?columnID=295&articleID=9587&pageNO=1 用他的代码,就是最下边那一段用堆栈实现的方法,但是发现一个问题 1.startElement吓endElement中都应该是操作p2吧,比如 public vo...
看了ccidnet上关于sax的文章
http://developer.ccidnet.com/pub/disp/Article?columnID=295&articleID=9587&pageNO=1
用他的代码,就是最下边那一段用堆栈实现的方法,但是发现一个问题
1.startElement吓endElement中都应该是操作p2吧,比如
public void startElement(String p0, String p1, String p2, Attributes p3) throws SAXException {
tags.push(p1);
}
应该改为
public void startElement(String p0, String p1, String p2, Attributes p3) throws SAXException {
tags.push(p2);
}
吧
2.
public void characters(char[] p0, int p1, int p2) throws SAXException {
//从栈中得到当前节点的信息
String tag=(String) tags.peek();
if (tag.equals("text")) text=new String(p0,p1,p2);
else if (tag.equals("url")) url=new String(p0,p1,p2);
else if (tag.equals("author")) author=new String(p0,p1,p2);
else if (tag.equals("day")) day=new String(p0,p1,p2);
else if (tag.equals("month")) month=new String(p0,p1,p2);
else if (tag.equals("year")) year=new String(p0,p1,p2);
else if (tag.equals("description")) year=new String(p0,p1,p2);
}
怎么得到的都是null呀,哪位能帮个忙呀
http://developer.ccidnet.com/pub/disp/Article?columnID=295&articleID=9587&pageNO=1
用他的代码,就是最下边那一段用堆栈实现的方法,但是发现一个问题
1.startElement吓endElement中都应该是操作p2吧,比如
public void startElement(String p0, String p1, String p2, Attributes p3) throws SAXException {
tags.push(p1);
}
应该改为
public void startElement(String p0, String p1, String p2, Attributes p3) throws SAXException {
tags.push(p2);
}
吧
2.
public void characters(char[] p0, int p1, int p2) throws SAXException {
//从栈中得到当前节点的信息
String tag=(String) tags.peek();
if (tag.equals("text")) text=new String(p0,p1,p2);
else if (tag.equals("url")) url=new String(p0,p1,p2);
else if (tag.equals("author")) author=new String(p0,p1,p2);
else if (tag.equals("day")) day=new String(p0,p1,p2);
else if (tag.equals("month")) month=new String(p0,p1,p2);
else if (tag.equals("year")) year=new String(p0,p1,p2);
else if (tag.equals("description")) year=new String(p0,p1,p2);
}
怎么得到的都是null呀,哪位能帮个忙呀
|
问题出现在下面这句中:
xmlReader.parse(new File(filename),new SAXCounter());
把它改成:
xmlReader.parse(new File(filename),this);
你的代码就不会再有问题了,原因是引用了不同实例的问题。
xmlReader.parse(new File(filename),new SAXCounter());
把它改成:
xmlReader.parse(new File(filename),this);
你的代码就不会再有问题了,原因是引用了不同实例的问题。
|
1)this 放哪里了?不new实例,直接用是不可以的!如果你这里的概念不太清楚的话我建议你用另外一个类调用这个解析类。
2)如果这么声明,你应该知道了那几个String的意思了(你自己最好打印出来看看):
public void startElement(
String namespaceURI,
String localName,
String rawName,
Attributes attrs)
throws SAXException {}
3)我没有你所有的SOURCE CODE,时间原因不再给你细分析,以下是我们工程中用到的解析代码段:
//完成对xmlString的解析工作
private void parser(String xmlString) throws WebException {
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser saxParser = null;
XMLReader reader = null;
try {
// 创建一个SAXParser解析器对象
saxParser = spf.newSAXParser();
reader = saxParser.getXMLReader();
} catch (Exception ex) {
LogHelper log =
new LogHelper("com.XXXXXXXXXXXXXXXX.class");
log.log(getEnvHead(), 300004, ex.getMessage());
if (GlobalNames.DEBUG_OUTPUT_FLAG) {
System.err.println(ex);
}
throw new WebException("sax parser load error");
}
try {
StringReader sr = new StringReader(xmlString);
//注册handler,并进行解析
saxParser.parse(new org.xml.sax.InputSource(sr), this);
} catch (Exception ioe) {
LogHelper log =
new LogHelper("com.XXXXXXXXXXXX.class");
log.log(getEnvHead(), 300006, ioe.getMessage());
if (GlobalNames.DEBUG_OUTPUT_FLAG) {
System.err.println(ioe);
}
throw new WebException("IO error");
}
}
2)如果这么声明,你应该知道了那几个String的意思了(你自己最好打印出来看看):
public void startElement(
String namespaceURI,
String localName,
String rawName,
Attributes attrs)
throws SAXException {}
3)我没有你所有的SOURCE CODE,时间原因不再给你细分析,以下是我们工程中用到的解析代码段:
//完成对xmlString的解析工作
private void parser(String xmlString) throws WebException {
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser saxParser = null;
XMLReader reader = null;
try {
// 创建一个SAXParser解析器对象
saxParser = spf.newSAXParser();
reader = saxParser.getXMLReader();
} catch (Exception ex) {
LogHelper log =
new LogHelper("com.XXXXXXXXXXXXXXXX.class");
log.log(getEnvHead(), 300004, ex.getMessage());
if (GlobalNames.DEBUG_OUTPUT_FLAG) {
System.err.println(ex);
}
throw new WebException("sax parser load error");
}
try {
StringReader sr = new StringReader(xmlString);
//注册handler,并进行解析
saxParser.parse(new org.xml.sax.InputSource(sr), this);
} catch (Exception ioe) {
LogHelper log =
new LogHelper("com.XXXXXXXXXXXX.class");
log.log(getEnvHead(), 300006, ioe.getMessage());
if (GlobalNames.DEBUG_OUTPUT_FLAG) {
System.err.println(ioe);
}
throw new WebException("IO error");
}
}
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。