为了账号安全,请及时绑定邮箱和手机立即绑定

关于SAXParserHandler类中startElement方法中else if(!qName.equals("book") && !qName.equals("bookstore"))的问题

/**

  * 解析xml元素

  */

 @Override

 public void startElement(String uri, String localName, String qName,

   Attributes attributes) throws SAXException {

  //调用DefaultHandler类的startElement方法

  super.startElement(uri, localName, qName, attributes);

  if (qName.equals("book")) {

   bookIndex++;

   //创建一个book对象

   book = new Book();

   //开始解析book元素的属性

   System.out.println("======================开始遍历某一本书的内容=================");

//   //已知book元素下属性的名称,根据属性名称获取属性值

//   String value = attributes.getValue("id");

//   System.out.println("book的属性值是:" + value);

   //不知道book元素下属性的名称以及个数,如何获取属性名以及属性值

   int num = attributes.getLength();

   for(int i = 0; i < num; i++){

    System.out.print("book元素的第" + (i + 1) +  "个属性名是:"

      + attributes.getQName(i));

    System.out.println("---属性值是:" + attributes.getValue(i));

    if (attributes.getQName(i).equals("id")) {

     book.setId(attributes.getValue(i));

    }

   }

  }

  else if (!qName.equals("book") && !qName.equals("bookstore")) {

   System.out.print("节点名是:" + qName + "---");

  }

 }

这里为什么要加加一个else if (!qName.equals("book") && !qName.equals("bookstore"))来判断? 如果qName的值是“book”,前面已经有相关的处理代码了。如果qName的值是“bookstore”程序应该会自动调用endDocument()方法。既然用不到else if()里面的判断语句,为什么不直接写个else ,后面接着输出qName为节点名就好了?求各位指点

正在回答

1 回答

最开头的<bookstore>标签也会进入startDocument()方法,所以要排除掉;

另外,后面的结束标签</bookstore>才会进入endDocument()方法

0 回复 有任何疑惑可以回复我~
#1

慕圣0830664 提问者

非常感谢!
2017-05-17 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

关于SAXParserHandler类中startElement方法中else if(!qName.equals("book") && !qName.equals("bookstore"))的问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信