大家好我是Person1号,我的智商是82
大家好,我是狗1号,我的智商是43
大家好我是Person2号,我的智商是136
大家好,我是狗2号,我的智商是23
大家好我是Person3号,我的智商是170
大家好,我是狗3号,我的智商是50
大家好我是Person4号,我的智商是207
大家好,我是狗4号,我的智商是20
大家好我是Person5号,我的智商是227
大家好,我是狗5号,我的智商是37
public class Animal{
String name;
int iq;
String detail;
public Animal(String name, int iq, String detail) {
super();
this.name = name;
this.iq = iq;
this.detail = detail;
}
@Override
public String toString() {
return "Animal [name=" + name + ", iq=" + iq + ", detail=" + detail + "]";
}
}
public class Person extends Animal{
public Person(String name, int iq, String detail) {
super(name, iq, detail);
}
@Override
public String toString() {
return "Person [name=" + name + ", iq=" + iq + ", detail=" + detail + "]";
}
}
public class Dog extends Animal{
public Dog(String name, int iq, String detail) {
super(name, iq, detail);
}
@Override
public String toString() {
return "Dog [name=" + name + ", iq=" + iq + ", detail=" + detail + "]";
}
}
import java.io.File;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
public class SaxParse {
// Saxparse解析
public static void saxParse(String path) throws Exception {
// 获得解析器
SAXParser sp = SAXParserFactory.newInstance().newSAXParser();
// 解析规则
MyHandler mh = new MyHandler();
// 解析
sp.parse(new File(path),mh);
for (Animal am : mh.list) {
System.out.println(am.toString());
}
}
}
import java.util.ArrayList;
import java.util.List;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class MyHandler extends DefaultHandler{
Listlist = new ArrayList<>();
Animal am;
//获取xml节点属性值
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
//判断是person还是dog,qName即表示元素节点值
if("Person".equals(qName)) {
//attributes表示person属性值,getValue("name")表示获取属性名为name的value
am = new Person(attributes.getValue("name"), Integer.parseInt(attributes.getValue("iq")), null);
list.add(am);
}else if("Dog".equals(qName)) {
am = new Dog(attributes.getValue("name"), Integer.parseInt(attributes.getValue("iq")),null);
list.add(am);
}
}
//获取节点中间value,即value
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
if(am!=null) {
//获取内容并去除首尾空格
am.detail = new String(ch, start, length).trim();
am = null;
}
}
}
public class Test {
public static String path = "src/Animal.xml";
public static void main(String[] args) throws Exception {
SaxParse.saxParse(path);
}
}
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
/*dom和sax的对比:
*效率:sax>dom
*用起来顺手:dom>sax
*工作中用dom用的高
*/
public class DomParse {
static Listlist = new ArrayList<>();
static Animal am;
public static void main(String[] args)throws Exception {
domParse("src/Animal.xml");
}
// dom解析
public static void domParse(String path) throws Exception {
//获取工厂并获取解析器
DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
//解析
Document doc = db.parse(new File(path));
//根据标签名获取元素列表
NodeList p = doc.getElementsByTagName("Person");
NodeList d = doc.getElementsByTagName("Dog");
//遍历Node
for (int i = 0; i < p.getLength(); i++) {
Element ele = (Element) p.item(i);
am = new Person(ele.getAttribute("name"), Integer.parseInt(ele.getAttribute("iq")), ele.getTextContent());
list.add(am);
}
for (int i = 0; i < d.getLength(); i++) {
Element ele = (Element) d.item(i);
am = new Dog(ele.getAttribute("name"), Integer.parseInt(ele.getAttribute("iq")), ele.getTextContent());
list.add(am);
}
//输出
for (Animal animal : list) {
System.out.println(animal.toString());
}
}
}
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.input.SAXBuilder;
public class JdomParse {
public static void main(String[] args)throws Exception {
jdomParse("src/Animal.xml");
}
/*Jdom:是外部提供的用于xml相关操作的工具
* 写入xml方便
*/
//解析xml
public static void jdomParse(String path) throws Exception {
//建立解析器
SAXBuilder sb = new SAXBuilder();
Document doc = sb.build(new File(path));
//获取根标签
Element root = doc.getRootElement();
//获取所有子标签的集合
Listlist = root.getChildren();
List ams = new ArrayList<>();
for (Element element : list) {
//根据子标签名字匹配javabean,element.getAttributeValue获取属性
if("Person".equals(element.getName())) {
ams.add(new Person(element.getAttributeValue("name"), Integer.parseInt(element.getAttributeValue("iq")), element.getText()));
}else if("Dog".equals(element.getName())) {
ams.add(new Dog(element.getAttributeValue("name"), Integer.parseInt(element.getAttributeValue("iq")), element.getText()));
}
}
//输出
for (Animal animal : ams) {
System.out.println(animal.toString());
}
}
}
4.jdk自带的解析xml的方式:
JAXBContext
注解
1.创建一个xml配置文件
2.定义一个java bean 用于映射xml配置文件
每个节点都需要定义一个bean 与之关联
BeanDefinition >>
3.在配置类的类上和属性的get方法上添加相应的注解:
类上:
@XmlRootElement
get方法上
@XmlAttribute
作为子节点的属性:
@XmlElement
通过注解中的name属性, 将xml中的标签名和属性名和java bean中的属性关联起来
4.解析xml
通过JAXBContext来解析xml
具体通过实现spring ioc(控制反转)讲解