xml中dom的增加和删除、sax的解析(No.21)

 

<?xml version="1.0" encoding="UTF-8" standalone="no"?>

<note>

<store>和阮超市</store>

<saddress>河北软件学院</saddress>

<storeType>吃穿住行</storeType>

<things><!-- 商品 -->

<basic><!-- 基本信息 -->

<name>红烧牛肉面</name>

<price>3.5</price>

<id>1011202</id>

<type>食品</type>

</basic>

<putin><!-- 入库信息 -->

<putInTime>入库时间:2011-9-26</putInTime>

<number>4000</number>

<outDate>有效日期:2012-9-26</outDate>

<operator>操作员:张三</operator>

</putin>

<source><!-- 商品货源 -->

<workPeople>商人:李四</workPeople>

<工作时间>4年</工作时间><address>地址:北京</address>

<phone>电话:110</phone>

</source>

<out><!-- 出库信息 -->

<putOutTime>出库日期:2011-9-27</putOutTime>

<putOutNo>出库数量:20箱</putOutNo>

<putOutPerson>操作员:王五</putOutPerson>

</out>

<工作时间>3年</工作时间></things>

<things>

<basic><!-- 基本信息 -->

<name>麻辣牛肉面</name>

<price>3</price>

<id>1011203</id>

<type>食品</type>

</basic>

<putin><!-- 入库信息 -->

<putInTime>2011-9-26</putInTime>

<number>30箱</number>

<outDate>2012-9-26</outDate>

<operator>张三</operator>

</putin>

<source><!-- 商品货源 -->

<workPeople>李六</workPeople>

<address>北京</address>

<phone>110</phone>

</source>

<out><!-- 出库信息 -->

<putOutTime>2011-9-27</putOutTime>

<putOutNo>20箱</putOutNo>

<putOutPerson>王五</putOutPerson>

</out>

<工作时间>4年</工作时间></things>

<things>

<basic><!-- 基本信息 -->

<name>洗衣粉</name>

<price>2</price>

<id>2011201</id>

<type>生活用品</type>

</basic>

<putin><!-- 入库信息 -->

<putInTime>2011-9-26</putInTime>

<number>300袋</number>

<outDate>2012-9-26</outDate>

<operator>张三</operator>

</putin>

<source><!-- 商品货源 -->

<workPeople>邹胜</workPeople>

<address>天津</address>

<phone>119</phone>

</source>

<out><!-- 出库信息 -->

<putOutTime>2011-9-27</putOutTime>

<putOutNo>20袋</putOutNo>

<putOutPerson>王五</putOutPerson>

</out>

</things>

<things>

<basic><!-- 基本信息 -->

<name>香皂</name>

<price>200箱</price>

<id>2011203</id>

<type>生活用品</type>

</basic>

<putin><!-- 入库信息 -->

<putInTime>2011-9-26</putInTime>

<number>30箱</number>

<outDate>2012-9-26</outDate>

<operator>张三</operator>

</putin>

<source><!-- 商品货源 -->

<workPeople>吴玲</workPeople>

<address>上海</address>

<phone>114</phone>

</source>

<out><!-- 出库信息 -->

<putOutTime>2011-9-27</putOutTime>

<putOutNo>20箱</putOutNo>

<putOutPerson>王五</putOutPerson>

</out>

</things>

<people><!-- 管理员 -->

<peopleId>1</peopleId>

<peopleName>马武</peopleName>

<peoplePhone>120</peoplePhone>

<peopleWork>经理</peopleWork>

<peopleType>食品</peopleType>

</people>

<people><!-- 管理员 -->

<peopleId>2</peopleId>

<peopleName>马生</peopleName>

<peoplePhone>150</peoplePhone>

<peopleWork>经理</peopleWork>

<peopleType>生活用品</peopleType>

</people>

</note>

实现SAXstore解析:

package 超市;

import java.io.File;

import java.io.IOException;

import org.xml.sax.Attributes;

import org.xml.sax.SAXException;

import javax.xml.parsers.SAXParser;

import org.xml.sax.helpers.DefaultHandler;

import javax.xml.parsers.SAXParserFactory;

import javax.xml.parsers.ParserConfigurationException;

public class StoreSaxTest {

public static void main(String[] args) {

try {

SAXParserFactory factory = SAXParserFactory.newInstance();

SAXParser parser = factory.newSAXParser();

parser.parse(new File("src/store.xml"),new StoreHander());

} catch (ParserConfigurationException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (SAXException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

class StoreHander extends DefaultHandler{

int i = 1;

Boolean flag = false;

//characters接收元素中字符数据的通知

public void characters(char[] ch,int start,int length) throws SAXException{

if(flag)

System.out.println(new String(ch,start,length));

}

//startDocument接收文档开始的通知

public void startDocument()throws SAXException{

System.out.println("开始");

}

//endDocument接收文档结束的通知

public void endDocument() throws SAXException{

System.out.println("结束");

}

//startElement接收元素开始的通知

public void startElement(String uri, String localName,String qName, Attributes attributes) throws SAXException{

if (qName.equals("name")){

if(i==2){//改变i的值,来实现输出第几个

flag = true;}

  i++;

}else

flag = false;

}

//startElement接收元素结束的通知

public void endElement(String uri,String localName,String qName) throws SAXException{

flag = false;

}

}

实现DOMstore的增加和修改:

package 超市;

import java.io.File;

import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;

import javax.xml.parsers.ParserConfigurationException;

import javax.xml.transform.Transformer;

import javax.xml.transform.TransformerConfigurationException;

import javax.xml.transform.TransformerException;

import javax.xml.transform.TransformerFactory;

import javax.xml.transform.dom.DOMSource;

import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;

import org.w3c.dom.Element;

import org.w3c.dom.Node;

import org.w3c.dom.Text;

import org.xml.sax.SAXException;

public class StoreDomTest1 {

public static void main(String[] args) {

try {

DocumentBuilderFactory factory = DocumentBuilderFactory

.newInstance();

DocumentBuilder builder = factory.newDocumentBuilder();

Document doc = builder.parse(new File("src/store.xml"));

// 执行插入(不指定位置)

createNode(doc);

// 执行插入(指定明确位置)

insertFixeNode(doc);

// 执行更新

updateNote(doc);

} catch (SAXException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (ParserConfigurationException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

}

// 插入

public static void createNode(Document doc) {

// 得到一个名称叫做是things的一个节点

Node node = doc.getElementsByTagName("things").item(0);

// 创建一个叫做“工作时间”的元素节点

Element element = doc.createElement("工作时间");

// 为工作时间这个元素节点添加值

element.setTextContent("3年");

// 添加到内存中(系统自动添加为最后一个元素节点)

node.appendChild(element);

// 把内存中的更新的数据添加到文本中(所有的数据都要覆盖一次)

try {

TransformerFactory factory = TransformerFactory.newInstance();

Transformer former = factory.newTransformer();

former.transform(new DOMSource(doc), new StreamResult(new File(

"src/store.xml")));

} catch (TransformerConfigurationException e) {

e.printStackTrace();

} catch (TransformerException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

// 指定位置的插入

public static void insertFixeNode(Document doc) {

// 得到一个名称叫做是things的一个节点

Node node = doc.getElementsByTagName("address").item(0);

// 创建一个元素节点

Element element = doc.createElement("工作时间");

// 创建一个文本节点

Text text = doc.createTextNode("4年");

// 把text添加到element中

element.appendChild(text);

// 指定确切位置

node.getParentNode().insertBefore(element, node);

try {

TransformerFactory factory = TransformerFactory.newInstance();

Transformer former = factory.newTransformer();

former.transform(new DOMSource(doc), new StreamResult(new File(

"src/store.xml")));

} catch (TransformerConfigurationException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (TransformerException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

// 更新

public static void updateNote(Document doc) {

Node node = doc.getElementsByTagName("number").item(0);

// 更新

node.setTextContent("4000");

// 更新到文本文件中

try {

TransformerFactory factory = TransformerFactory.newInstance();

Transformer former = factory.newTransformer();

former.transform(new DOMSource(doc), new StreamResult(new File(

"src/store.xml")));

} catch (TransformerConfigurationException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (TransformerException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值