XML重点解析

XML解析方式分为两种:dom和sax
dom:(Document Object Model, 即文档对象模型) 是 W3C 组织推荐的处理 XML 的一种方式。
sax: (Simple API for XML) 不是官方标准,但它是 XML 社区事实上的标准,几乎所有的 XML 解析器都支持它。
区别:
SAX:边加载边解析,解析器在解析XML文档时,会把文档中的所有元素,按照其出现的层次关系增删改查
DOM:,需要读取整个 XML 文档,如果 XML 文档特别大,就会消耗计算机的大量内存,并且容易导致内存溢出。只能进行查询

2.约束几种,区别
Schema  DTD:
XML Schema符合XML语法结构。
DOM、SAX等XML API很容易解析出XML Schema文档中的内容。
XML Schema对名称空间支持得非常好。
XML Schema比XML DTD支持更多的数据类型,并支持用户自定义新的数据类型。
XML Schema定义约束的能力非常强大,可以对XML实例文档作出细致的语义限制。
XML Schema不能像DTD一样定义实体,比DTD更复杂,但Xml Schema现在已是w3c组织的标准,它正逐步取代DTD。 

public class Demo2 {
 
 //遍历所有的节点 read
 @Test
 public void read() throws ParserConfigurationException, SAXException, IOException{
  DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
  DocumentBuilder db = factory.newDocumentBuilder();
  Document document = db.parse("src/book.xml");
  //得到根节点
  Node root=document.getElementsByTagName("书架").item(0);
  list(root);
 
 }

 private void list(Node node) {
  if(node instanceof Element){
   System.out.println(node.getNodeName());
  }
 
  NodeList list=node.getChildNodes();
  for(int i=0;i<list.getLength();i++){
   Node child=list.item(i);
   list(child);
  }
 
 }
 
 //读取属性的值
 @Test
 public void read1() throws ParserConfigurationException, SAXException, IOException{
  DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
  DocumentBuilder db = factory.newDocumentBuilder();
  Document document = db.parse("src/book.xml");
 
  Element  node=(Element) document.getElementsByTagName("书名").item(0);
  String value=node.getAttribute("id");
  System.out.println(value);
 
 }
 
 //添加节点
 @Test
 public void insert() throws ParserConfigurationException, SAXException, IOException, TransformerException{
  DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
  DocumentBuilder db = factory.newDocumentBuilder();
  Document document = db.parse("src/book.xml");
 
  //创建节点
  Element element = document.createElement("优惠价");
  element.setTextContent("29元");
  //把创建出来的节点添加到第一本书上
  Element book=(Element) document.getElementsByTagName("书").item(0);
  book.appendChild(element);
 
  //把添加的节点写的xml文件中
  TransformerFactory tff = TransformerFactory.newInstance();
  Transformer tf = tff.newTransformer();
  tf.transform(new DOMSource(document),new StreamResult(new FileOutputStream("src/book.xml")));
 }
 
 //在指定位置添加节点
 @Test
 public void insert1() throws ParserConfigurationException, SAXException, IOException, TransformerException{
  DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
  DocumentBuilder db = factory.newDocumentBuilder();
  Document document = db.parse("src/book.xml");
 
  //创建节点
  Element element = document.createElement("优惠价");
  element.setTextContent("29元");
 
  //获取参考节点
  Element price=(Element) document.getElementsByTagName("售价").item(0);
  //把创建出来的节点添加到第一本书上
  Element book=(Element) document.getElementsByTagName("书").item(0);
  book.insertBefore(element, price);
 
 
  //把添加的节点写的xml文件中
  TransformerFactory tff = TransformerFactory.newInstance();
  Transformer tf = tff.newTransformer();
  tf.transform(new DOMSource(document),new StreamResult(new FileOutputStream("src/book.xml")));
 }
 
 //删除节点
 @Test
 public void delete() throws ParserConfigurationException, SAXException, IOException, TransformerException{
  DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
  DocumentBuilder db = factory.newDocumentBuilder();
  Document document = db.parse("src/book.xml");
 
  //获取要删除的节点
  Element e=(Element) document.getElementsByTagName("售价").item(0);
  //获取到要删除节点的父节点
  //Element parent=(Element) e.getParentNode();
  //parent.removeChild(e);
  e.getParentNode().getParentNode().removeChild(e.getParentNode());
 
 
  TransformerFactory tff = TransformerFactory.newInstance();
  Transformer tf = tff.newTransformer();
  tf.transform(new DOMSource(document),new StreamResult(new FileOutputStream("src/book.xml")));
 }
 
 //更新
 @Test
 public void update() throws Exception{
  DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
  DocumentBuilder db = factory.newDocumentBuilder();
  Document document = db.parse("src/book.xml");
 
  //获取要更新的节点
  Element e=(Element) document.getElementsByTagName("售价").item(0);
  e.setTextContent("38元");
 
 
  TransformerFactory tff = TransformerFactory.newInstance();
  Transformer tf = tff.newTransformer();
  tf.transform(new DOMSource(document),new StreamResult(new FileOutputStream("src/book.xml")));
 }
 

}

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值