慕圣0830664
2017-05-08 10:17
/**
* 解析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为节点名就好了?求各位指点
最开头的<bookstore>标签也会进入startDocument()方法,所以要排除掉;
另外,后面的结束标签</bookstore>才会进入endDocument()方法
Java眼中的XML---文件读取
83199 学习 · 447 问题
相似问题