<?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>
实现SAX对store解析:
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;
}
}
实现DOM对store的增加和修改:
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();
}
}
}