代码学着视频敲得,怎么运行结果就是不一样呢?

来源:3-3 使用 SAX 解析 XML 文件的节点名和节点间文本

慕先生9431606

2018-01-31 18:08

package com.fwh.handle;

import javax.xml.stream.events.StartElement;

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

public class Handletest extends DefaultHandler {
 int index=0;
 //遍历XML文件的开始标签
 @Override
 public void startElement(String uri, String localName, String qName,
   Attributes attributes) throws SAXException {
  // TODO Auto-generated method stub
  //条用DefaultHandler的startElement方法
  super.startElement(uri, localName, qName, attributes);
   if(qName.equals("book")) {
    index++;
    System.out.println("===========第"+index+"本书开始了============");
//    String a=attributes.getValue("id");
//    System.out.print("属性名ID的值为:"+a);
    int a=attributes.getLength();
    for(int i=0;i<a;i++) {
     System.out.print("属性名:"+attributes.getQName(i));
     System.out.println("---值为:"+attributes.getValue(i));
    }
   }else if(!qName.equals("book")&&!qName.equals("bookstore")) {
    System.out.print("节点名是:"+qName);
   }
 }
 //遍历XML文件的结束标签
 @Override
 public void endElement(String uri, String localName, String qName)
   throws SAXException {
  // TODO Auto-generated method stub
  super.endElement(uri, localName, qName);
  if(qName.equals("book")) {
  System.out.println("===========第"+index+"本书结束了============");
  }
 }
 //用来标识解析开始
 @Override
 public void startDocument() throws SAXException {
  // TODO Auto-generated method stub
  super.startDocument();
  System.out.println("现在,解析xml开始了!");
 }
 //用来标识解析结束
 @Override
 public void endDocument() throws SAXException {
  // TODO Auto-generated method stub
  super.endDocument();
  System.out.println("现在,解析xml结束了!");
 }
 @Override
 public void characters(char[] ch, int start, int length) throws SAXException {
  // TODO Auto-generated method stub
  super.characters(ch, start, length);
  String a=new String(ch, start, length);
  if(!a.trim().equals(" ")) {
   System.out.println("---属性值为:"+a);
  }
 }

}

http://img.mukewang.com/5a71956e00013a6904810508.jpg

写回答 关注

4回答

  • Lawrence
    2018-10-30 20:25:10

    大哥啊~equals("")是等于空字符串,不是等于空格~

  • qq_星河k_0
    2018-07-19 15:48:39

    1楼是对的.

  • 丑丶小亚
    2018-02-05 14:07:33

    http://img2.mukewang.com/5a77f2120001c59e03670057.jpg

    判断写错了,是“”,而不是“ ”,中间没有空格。

    你可以输出ch看一下它的结构,他是由一推空格一堆标记还有文字组成,从头解析,遇到标记理解为一组,遇到一堆空格理解为一组,现在是要排除掉空格组,以免错误输出或者null执行。String.trim()是去掉首尾所有的空格一堆空格去掉了所有的空格当然就没有东西了,所以是“”!,判断中用了(!非),也就是,不是没有内容的字符,剩下的当然就是有效的(需要的)了。

    慕先生943...

    我试试?

    2018-02-05 14:11:27

    共 1 条回复 >

  • sunbohan00
    2018-01-31 19:36:39

    你的属性值没有打印出来,a的值是空的, 说明String a=new String(ch, start, length) 这一句有问题,检查一下char[] 数组里面的东西,实体类里面有没有set get,

    慕先生943...

    视频中的重写了Characters语句后,运行,只会让子节点执行这个语句,我这个根节点都执行了这个语句,怎么一回事?代码能运行,找了好几遍,没啥问题啊

    2018-01-31 20:15:33

    共 1 条回复 >

Java眼中的XML---文件读取

通过Java认识并且创造XML文件,如何应用 Java“解析 XML

83199 学习 · 431 问题

查看课程

相似问题