一、DOM解析
DOM:Document Object Model 文档对象模型
//实例化document工厂
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
//实例化document构造器
DocumentBuilder db=dbf.newDocumentBuilder();
//通过构造器读取数据(解析数据)
Document document=db.parse(new File("students.xml"));
//拿到<students>根节点
Element element=document.getDocumentElement();
//拿到<student>下的所有节点
NodeList nodeList=element.getElementsByTagName("student");
for (int i = 0; i <nodeList.getLength(); i++) {
//遍历所有的子节点,得到某子节点
Element student=(Element) nodeList.item(i);
//得到属性的值打印
System.out.println(student.getAttribute("sid")+" "+student.getAttribute("sname"));
NodeList nodeList2=student.getChildNodes();
for (int j = 0; j <nodeList2.getLength(); j++) {
Node node=nodeList2.item(j);
//判断是否是标签
if(node.getNodeType()==node.ELEMENT_NODE){
Element element2=(Element) nodeList2.item(j);
if("sage".equals(element2.getNodeName())){
//得到标签的内容打印
System.out.println(element2.getTextContent());
}else if("ssex".equals(element2.getNodeName())){
System.out.println(element2.getTextContent());
}
}
}
}
二、Dom4j解析
//实例化SAX读取器
SAXReader saxReader=new SAXReader();
//读取
Document document=saxReader.read(new File("students.xml"));
//拿到根节点
Element element=document.getRootElement();
//拿到student所有的节点
List<Element> list=element.elements("student");
//通过集合去遍历得到的标签和属性值
for (Element element2 : list) {
System.out.println(element2.attributeValue("sid")+element2.attributeValue("sname")+element2.element("sage").getTextTrim());
}
三、SAX解析
a) 具体的英文名是:Simplement API for XML
//实例化SAX解析器工厂
SAXParserFactory saf=SAXParserFactory.newInstance();
//实例化SAX构造器
SAXParser sap=saf.newSAXParser();
//开始解析
sap.parse(new File("students.xml"), new DefaultHandler(){
//暂时定义一个名字为null
String name=null;
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
if("sage".equals(name)){
System.out.println(new String(ch, start, length));
}
}
@Override
public void endElement(String uri, String localName,
String qName) throws SAXException {
name=null;
}
@Override
public void startElement(String uri, String localName,
String qName, Attributes attributes)
throws SAXException {
//拿到跟标签下的子标签
name=qName;
if("student".equals(qName)){
System.out.println(attributes.getValue(0)+" "+attributes.getValue(1));
}
}
});
四、DOM和SAX解析的区别
a) DOM解析占用内存比较大,但是方便对XML进行CRUD
b) SAX有点占用内存小,解析速度快,缺点只适合做文档读取,不适合做CRUD.