模拟火车票软件(练习DOM4J对XML的读写等操作)
模拟火车票软件,是我自己的练习题,没有整理和注释,只做以后查看之用。与此有关的文件有tickets.xsd,tickets.xml存储车票,Ticket.java声明车票,StoreException.java包装异常,TestTicket.java测试类等不再写入。
package ticket.dom4j.wkjava;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.text.ParseException;
import java.text.SimpleDateFormat;
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.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.xml.sax.SAXException;
public class TicketXMLDAO {
private Document doc;
private String filename = "tickets.xml";
private SimpleDateFormat dateFmt = new SimpleDateFormat("yyyy-MM-dd");
public TicketXMLDAO() throws StoreException {
super();
try {
doc = load(filename);
} catch (Exception e) {
e.printStackTrace();
throw new StoreException(e);
}
}
private Document load(String xmlfile)
throws SAXException, FileNotFoundException, DocumentException {
SAXReader reader = new SAXReader(true);
reader.setFeature("http://apache.org/xml/features/validation/schema",true);
return reader.read(new FileInputStream(xmlfile));
}
public void store(String filename) throws IOException {
Writer out = new OutputStreamWriter(new FileOutputStream(filename),"utf-8");
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter writer = new XMLWriter(out, format);
writer.write(this.doc);
out.close();
}
public Ticket insertTicket(Ticket ticket) throws StoreException {
String xpath = "/tickets";
Element tickets = (Element)doc.selectSingleNode(xpath);
ticket.setId(getNextID());
Element t = tickets.addElement("ticket");
t.addAttribute( "id", ticket.getId() );
t.addElement("from").addText(ticket.getFrom());
t.addElement("to").addText(ticket.getTo());
t.addElement("price").addText(ticket.getPrice()+"");
t.addElement("start").addText(dateFmt.format(ticket.getStart()));
try {
store(filename);
} catch (IOException e) {
e.printStackTrace();
throw new StoreException(e);
}
return ticket;
}
private String getNextID() {
String xpath = "/tickets/ticket";
List list = doc.selectNodes(xpath);
int idValue = 0;
for (Iterator i = list.iterator();i.hasNext();){
Element t = (Element)i.next();
String id = t.attributeValue("id");
int value = Integer.parseInt(id.substring(1));
idValue = value>idValue? value : idValue;
}
idValue++;
return "T" + idValue;
}
public Ticket updateTicket(Ticket ticket) throws StoreException {
String xpath = "/tickets/ticket[@id = \" " + ticket.getId() + " \"]";
Element t = (Element)doc.selectSingleNode(xpath);
t.addElement("from").setText(ticket.getFrom());
t.addElement("to").setText(ticket.getTo());
t.addElement("price").setText(ticket.getPrice()+"");
t.addElement("start").setText(dateFmt.format(ticket.getStart()));
try {
store(filename);
} catch (IOException e) {
e.printStackTrace();
throw new StoreException(e);
}
return ticket;
}
public Ticket removeTicket(Ticket ticket) throws StoreException{
String xpath = "/tickets/ticket[@id = \" " + ticket.getId() + " \"]";
Element t = (Element)doc.selectSingleNode(xpath);
Element parent = t.getParent();
parent.remove(t);
try {
store(filename);
} catch (IOException e) {
e.printStackTrace();
throw new StoreException(e);
}
return ticket;
}
public Ticket findTicket(String id) throws StoreException {
String xpath = "/tickets/ticket[@id = \" " + id + " \"]";
Ticket ticket = null;
Element t = (Element)doc.selectSingleNode(xpath);
if(t==null)
return ticket;
ticket = new Ticket();
ticket.setId(t.attributeValue("id"));
ticket.setFrom(t.elementText("from"));
ticket.setTo(t.elementText("to"));
ticket.setPrice(Double.parseDouble(t.elementText("price")));
try {
ticket.setStart(dateFmt.parse(t.elementText("start")));
} catch (ParseException e) {
e.printStackTrace();
throw new StoreException(e);
}
return ticket;
}
public List findTickets() throws StoreException {
List list = new ArrayList();
//String xpath = "/tickets/ticket";
List tickets = doc.getRootElement().elements();
for (Iterator i = list.iterator();i.hasNext();){
Element t = (Element)i.next();
Ticket ticket = new Ticket();
ticket.setId(t.attributeValue("id"));
ticket.setFrom(t.elementText("from"));
ticket.setTo(t.elementText("to"));
ticket.setPrice(Double.parseDouble(t.elementText("price")));
try {
ticket.setStart(dateFmt.parse(t.elementText("start")));
} catch (ParseException e) {
e.printStackTrace();
throw new StoreException(e);
}
list.add(ticket);
}
return list;
}
public List findTicketByFrom(String from) throws StoreException {
List list = new ArrayList();
String xpath = "/tickets/ticket[from=\""+from+"\"]";
List tickets = doc.selectNodes(xpath);
for (Iterator i = list.iterator();i.hasNext();){
Element t = (Element)i.next();
Ticket ticket = new Ticket();
ticket.setId(t.attributeValue("id"));
ticket.setFrom(t.elementText("from"));
ticket.setTo(t.elementText("to"));
ticket.setPrice(Double.parseDouble(t.elementText("price")));
try {
ticket.setStart(dateFmt.parse(t.elementText("start")));
} catch (ParseException e) {
e.printStackTrace();
throw new StoreException(e);
}
list.add(ticket);
}
return list;
}
}
weiking
2006-04-20 12:29:55
评论:0
阅读:1271
引用:0
