XML总结

在这里插入图片描述
DTD验证文档:

<?xml version="1.0" encoding="UTF-8"?>
<!--  <!DOCTYPE books [
 <!ELEMENT books (book*)>
 <!ELEMENT book (name,author,price)>
 <!ELEMENT name (#PCDATA)>
 <!ELEMENT author (#PCDATA)>
 <!ELEMENT price (#PCDATA)>
 <!ATTLIST book id CDATA #REQUIRED>
]>-->
<books xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:noNamespaceSchemaLocation="{book.xsd}">
 <book id="1001">
  <name>java开发实战</name>  <author>张小三</author>
  <price>98.5</price>
 
 </book>
 <book id="1002">
  <name>mysql从删库到跑路</name>
  <author>王一一</author>
  <price>89.7</price>
  
 </book>
</books>

DOM方式解析XML:

package xmlDOM;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class TestxmlDOMParsew {
 public static void main(String[] args) throws SAXException, IOException, ParserConfigurationException {
  //创建一个Document builder factory的对象
 DocumentBuilderFactory bdf = DocumentBuilderFactory.newInstance();
//创建一个DocumentBuilder对象
 DocumentBuilder db=bdf.newDocumentBuilder();
//通过DocumentBuilder的parse(。。。)方法得到document对现场
 Document doc = db.parse("book.xml");
//通过getElementByTagName(。。。)方法获取到节点列表
 NodeList booklist = doc.getElementsByTagName("book");
 System.out.println(booklist.getLength());
//通过for循环遍历每一个节点
 for(int i = 0;i<booklist.getLength();i++) {
  //得到每一个节点的属性和属性值
  Node book = booklist.item(i);
  NamedNodeMap attrs = book.getAttributes();  //得到了属性的集合
  //循环遍历每一个属性
  for(int j = 0;j<attrs.getLength();j++) {
   Node id = attrs.item(j);
   System.out.println("属性的名称:" + id.getNodeName() + "\t" + id.getNodeValue());
  }
 }
 System.out.println("\n每一个节点的节点名和节点值");
//得到每一个节点的节点名和节点值
 for(int i = 0;i<booklist.getLength();i++) {
  //得到每一个book节点
  Node book = booklist.item(i);
  NodeList subnode = book.getChildNodes();
  System.out.println("得到的子节点的个数: "  + subnode.getLength());
  for(int j = 0;j < subnode.getLength();j++) {
   Node chNode = subnode.item(j);
  // System.out.println(chNode.getNodeName() + "\t" );
   short type = chNode.getNodeType();  //获取节点类型
   if(type == Node.ELEMENT_NODE) {
     System.out.println(chNode.getNodeName() + "\t" + chNode.getTextContent());
   }
  }
 }
 } 
}

SAX解析XML

package sax;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class BookDefaultHandler extends DefaultHandler{
//重写第一个方法
 /**解析xml文档开始时调用**/
@Override
public void startDocument() throws SAXException {
 // TODO Auto-generated method stub
 super.startDocument();
 System.out.println("解析xml文档开始");
}
 /**解析xml文档结束时调用**/
@Override
 public void endDocument() throws SAXException {
  // TODO Auto-generated method stub
  super.endDocument();
  System.out.println("解析xml文档结束");
 }
/**解析xml文件中节点时调用**/
@Override
 public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
  // TODO Auto-generated method stub
  super.startElement(uri, localName, qName, attributes);
  System.out.println("解析xml文档节点开始时调用");
  /*判断,如果是book节点的属性和属性值***/
  if("book".equals(qName)) {
   //】获取所有的属性
   int count = attributes.getLength();
   for(int i = 0;i<count;i++) {
    String attName = attributes.getQName(i);//属性名称
    String attValue = attributes.getValue(i);//属性值
    System.out.println("属性名称:" + attName + "属性值:" +  attValue);
   }
  }else {
   if(!"books".equals(qName)&&!"book".equals(qName)) {
    System.out.print("节点名称" + qName  + "\t");
   }
  }
 }
/**解析xml文档中节点结束时调用**/
@Override
 public void endElement(String uri, String localName, String qName) throws SAXException {
  // TODO Auto-generated method stub
  super.endElement(uri, localName, qName);
  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 value = new String(ch,start,length);
   if(!"".equals(value.trim())) {
    System.out.println(value);
   }
  }
}

package sax;
import java.io.IOException;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.SAXException;
public class TestSAXParse {
public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
 //1.创建SAXParserFactory的对象
 SAXParserFactory spf =  SAXParserFactory.newInstance();
 //2.创建SAXParser对象(解析器)
 SAXParser parser = spf.newSAXParser();
 //3.创建一个DefaultHandler的子类
 BookDefaultHandler bdh = new BookDefaultHandler();
 //4.调用parse方法
 parser.parse("book.xml", bdh);
}
}

JDOM方式解析XML:

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
public class TestJDOM {
public static void main(String[] args) throws FileNotFoundException, JDOMException, IOException {
 //1.创建一个SAXBuilder对象
 SAXBuilder sb = new SAXBuilder();
 //2.调用builder方法添加Document对象(IO)
 Document doc = sb.build(new FileInputStream("book.xml"));
 //3.获取根节点
 Element root = doc.getRootElement();
 //获取根节点的子节点集合
 List<Element> bookEle = root.getChildren();// book 两个book
 //遍历集合,得到book的每一个子节点元素
 for(int i = 0;i<bookEle.size();i++) {
  Element book = bookEle.get(i);
  //得到属性集合
  List<Attribute> attList = book.getAttributes();
  //遍历属性集合得到每一个元素
  for(Attribute attr : attList) {
   System.out.println(attr.getName() + "\t" + attr.getValue());
  }
 }
 //得到每一个v子节点
 System.out.println("\n***********************************");
 for(int i = 0;i<bookEle.size();i++) {
  Element book = bookEle.get(i);//锝到每一个book节点
  List<Element> subBook = book.getChildren();
  for (Element ele : subBook) {
   System.out.println(ele.getName() + "\t" + ele.getValue());
  }
  System.out.println("***************************************");
 }
}
}

DOM4J方式解析XML

import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import entity.Book;
public class TestDOM4J {
public static void main(String[] args)  {
 //1.创建SAXReader对象
 SAXReader reader = new SAXReader();
 //2.调用read方法
 Document doc = null;
 try {
  doc = reader.read(new File("book.xml"));
 } catch (DocumentException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }
 //3.获取根元素
 Element root = doc.getRootElement();
 //4.通过迭代器遍历直接节点
 for(Iterator<Element> itebook = root.elementIterator();itebook.hasNext();) {
  Element bookEle = itebook.next();
 // System.out.println(bookEle.getName());
  //锝到book的属性
  for(Iterator<Attribute> iteAtt = bookEle.attributeIterator();iteAtt.hasNext();) {
   Attribute att = iteAtt.next();
   System.out.println(att.getName() + "\t" + att.getValue());
  }
 } 
 //创建集合对象
 List<Book> bookList = new ArrayList<Book>();
 for(Iterator<Element> itebook = root.elementIterator();itebook.hasNext();) {
  //创建book对象
  Book book = new Book();  
  Element bookEle = itebook.next();  //锝到每一个book 
  //使用for循环继续便利
  for(Iterator<Element> subBookEle = bookEle.elementIterator();subBookEle.hasNext();) {
   //锝到每一个子元素
   Element subEle = subBookEle.next();
   System.out.println(subEle.getName() + "\t" + subEle.getText());
   /**
    * 
    *封装成book对象
    * 
    * **/
   //获取节点名称
   String nodeName = subEle.getName(); 
   //使用switch判断
   switch (nodeName) {
   case "name":
    book.setName(subEle.getText());
    break;
   case "author":
    book.setAuthor(subEle.getText());
    break;
   case "price":
    book.setPrice(Double.parseDouble(subEle.getText()));
    break;
   }   
  } 
  bookList.add(book);
 }
 //遍历集合
 System.out.println("\n集合遍历******************\n");
 for(Book b : bookList) {
  System.out.println(b.getName() + "\t" + b.getAuthor() + "\t" + b.getPrice());
 } 
}
}

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import entity.People;
public class TestWorker {
public static void main(String[] args) throws DocumentException  {
 //(1)SAXReader对象
 SAXReader reader = new SAXReader();
 //2.通过(1)的对象调用read方法
 Document doc = reader.read("Worker.xml");
 //3.获取根元素
 Element root = doc.getRootElement();
 //创建集合对象
 List<People> peoList= new ArrayList<People>();
 //4.通过迭代器遍历直接节点
 for(Iterator<Element> subpeoList = root.elementIterator();subpeoList.hasNext();) {
  People p = new People(); 
  Element peoEle = subpeoList.next(); 
  for(Iterator<Element> subPeopleEle = peoEle.elementIterator();subPeopleEle.hasNext();) {
   //锝到每一个子元素
   Element subEle = subPeopleEle.next();
   String nodeName = subEle.getName();
  //switch判断 
  switch (nodeName) {
  case "工号":
   p.setWorknumber(Integer.parseInt(subEle.getText()));
   break;
  case "姓名":
   p.setName(subEle.getText());
   break;
  case "年龄":
   p.setAge(Integer.parseInt(subEle.getText()));
   break;
  case "岗位":
   p.setWork(subEle.getText());
   break;
  case "薪资":
   p.setPay(Integer.parseInt(subEle.getText()));
   break;
  case "补助":
   p.setSubsidy(Integer.parseInt(subEle.getText()));
   break;
  }
  }
  peoList.add(p);
 }
 //遍历集合
 for (People people : peoList) {
  System.out.println(people);
 }
}
}


package Employe;
public class Employee {
private int num;
private String name;
private int age;
private String worker;
private int pay;
private int subsidy;
public int getNum() {
 return num;
}
public void setNum(int num) {
 this.num = num;
}
public String getName() {
 return name;
}
public void setName(String name) {
 this.name = name;
}
public int getAge() {
 return age;
}
public void setAge(int age) {
 this.age = age;
}
public String getWorker() {
 return worker;
}
public void setWorker(String worker) {
 this.worker = worker;
}
public int getPay() {
 return pay;
}
public void setPay(int pay) {
 this.pay = pay;
}
public int getSubsidy() {
 return subsidy;
}
public void setSubsidy(int subsidy) {
 this.subsidy = subsidy;
}
public Employee(int num, String name, int age, String worker, int pay, int subsidy) {
 super();
 this.num = num;
 this.name = name;
 this.age = age;
 this.worker = worker;
 this.pay = pay;
 this.subsidy = subsidy;
}
public Employee() {
 super();
}
@Override
public String toString() {
 return "Employee [num=" + num + ", name=" + name + ", age=" + age + ", worker=" + worker + ", pay=" + pay
   + ", subsidy=" + subsidy + "]";
}
}


package Employe;
import java.awt.List;
import java.io.File;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Iterator;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class Test4jdom {
public static void main(String[] args) throws DocumentException, ClassNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException {
 SAXReader reader = new SAXReader();
 Document doc = reader.read(new File("Worker.xml"));
 Element root = doc.getRootElement();
 for(Iterator<Element> ite = root.elementIterator();ite.hasNext();) {
  Element workEle = ite.next();  
 // System.out.println(workEle.getName());
  //得到work的属性
   for(Iterator<Attribute> iteAtt = workEle.attributeIterator();iteAtt.hasNext();) {    
    Attribute att = iteAtt.next();
    System.out.println(att.getName() + "\t" + att.getValue());    
   }
 }
 ArrayList<Employee> list = new ArrayList<Employee>();
 System.out.println("***********************************");
 for(Iterator<Element> iteWork= root.elementIterator();iteWork.hasNext();) {
  Class c = Class.forName("Employe.Employee");
  Constructor cons = c.getConstructor(null);
  Employee employee = (Employee)cons.newInstance();
     Element workEle=iteWork.next();
  for(Iterator<Element> subWorkEle = workEle.elementIterator();subWorkEle.hasNext();) {
   Element subEle = subWorkEle.next();
   System.out.println(subEle.getName() + "\t" + subEle.getText());
   switch (subEle.getName()){
            case "姓名":
                employee.setName(subEle.getText());
                break;
            case "年龄":
                employee.setAge(Integer.parseInt(subEle.getText()));
                break;
            case "岗位":
                employee.setWorker(subEle.getText());
                break;
            case "薪资":
                employee.setPay(Integer.parseInt(subEle.getText()));
                break;
            case "补助":
                employee.setSubsidy(Integer.parseInt(subEle.getText()));
                break;
        }  
  }
  list.add(employee);
  System.out.println("----------------------------------------");
 }
  for (Employee employee : list) {
    System.out.println(employee);
   }
}
}



package entity;
public class Book {
 private String name;
 private String author;
 private double price;
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public String getAuthor() {
  return author;
 }
 public void setAuthor(String author) {
  this.author = author;
 }
 public double getPrice() {
  return price;
 }
 public void setPrice(double price) {
  this.price = price;
 }
 public Book(String name, String author, double price) {
  super();
  this.name = name;
  this.author = author;
  this.price = price;
 }
 public Book() {
  super();
 }
}


package entity;
public class People {
 private Integer worknumber;
 private String name;
 private Integer age;
 private String work;
 private Integer pay;
 private Integer subsidy;
 public Integer getWorknumber() {
  return worknumber;
 }
 public void setWorknumber(Integer worknumber) {
  this.worknumber = worknumber;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public Integer getAge() {
  return age;
 }
 public void setAge(Integer age) {
  this.age = age;
 }
 public String getWork() {
  return work;
 }
 public void setWork(String work) {
  this.work = work;
 }
 public Integer getPay() {
  return pay;
 }
 public void setPay(Integer pay) {
  this.pay = pay;
 }
 public Integer getSubsidy() {
  return subsidy;
 }
 public void setSubsidy(Integer subsidy) {
  this.subsidy = subsidy;
 }
 public People(Integer worknumber, String name, Integer age, String work, Integer pay, Integer subsidy) {
  super();
  this.worknumber = worknumber;
  this.name = name;
  this.age = age;
  this.work = work;
  this.pay = pay;
  this.subsidy = subsidy;
 }
 public People() {
  super();
 }
 @Override
 public String toString() {
  return " worker | 工号 |" + worknumber + "| 姓名 |" + name +"| 年龄 |" + age + "| 岗位 |" + work + "| 薪资 |" + pay + "| 补助 |"
    + subsidy + " |";
 }
}






<?xml version="1.0" encoding="UTF-8"?>
<books>
 <book id="1001">
  <name>java开发实战</name>
  <author>张小三</author>
  <price>98.5</price>
 </book>
 <book id="1002">
  <name>mysql从删库到跑路</name>
  <author>王一一</author>
  <price>89.7</price>
 </book>
</books>




<?xml version="1.0" encoding="UTF-8"?>
<工号>
 <工号 id = "1001">
  <姓名>高淇</姓名>
  <年龄>18</年龄>
  <岗位>程序员</岗位>
  <薪资>30000</薪资>
  <补助>5000</补助>
 </工号>
 <工号 id = "1002">
  <姓名>高小二</姓名>
  <年龄>19</年龄>
  <岗位>讲师</岗位>
  <薪资>35000</薪资>
  <补助>2000</补助>
 </工号>
 <工号 id = "1003">
  <姓名>高小松</姓名>
  <年龄>20</年龄>
  <岗位>教授</岗位>
  <薪资>20000</薪资>
  <补助>3000</补助>
 </工号>
</工号>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值