有人要java dom解析的XML通讯录 洒家给写了个
用swing做的 解析XML那部分代码:
package com.test.parseXML;
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 java.awt.List;
import java.io.*;
import java.util.ArrayList;
import java.util.Vector;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.Text;
import org.xml.sax.SAXException;
public class ParseXML {
private Document getDocument(String filename)
{
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
factory.setIgnoringElementContentWhitespace(true);
try {
DocumentBuilder domParser=factory.newDocumentBuilder();
try {
Document document=domParser.parse(new File(filename));
return document;
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} catch (ParserConfigurationException e) {
e.printStackTrace();
}
return null;
}
public ArrayList<ArrayList> getNodeInfo(String filename)
{
ArrayList<ArrayList> myli=new ArrayList<ArrayList>();
Document document=getDocument(filename);
NodeList nodelist=document.getElementsByTagName("anpai");
for(int i=0;i<nodelist.getLength();i++)
{
String date=document.getElementsByTagName("date").item(i).getTextContent();
String time=document.getElementsByTagName("time").item(i).getTextContent();
String activity=document.getElementsByTagName("activity").item(i).getTextContent();
ArrayList<String> li=new ArrayList<String>();
li.add(date);
li.add(time);
li.add(activity);
myli.add(li);
}
return myli;
}
public ArrayList<ArrayList> getQueryNodeInfo(String filename,String query_date)
{
ArrayList<ArrayList> myli=new ArrayList<ArrayList>();
Document document=getDocument(filename);
NodeList nodelist=document.getElementsByTagName("anpai");
for(int i=0;i<nodelist.getLength();i++)
{
String date=document.getElementsByTagName("date").item(i).getTextContent();
if(date.equals(query_date))
{
String time=document.getElementsByTagName("time").item(i).getTextContent();
String activity=document.getElementsByTagName("activity").item(i).getTextContent();
ArrayList<String> li=new ArrayList<String>();
li.add(date);
li.add(time);
li.add(activity);
myli.add(li);
}
}
return myli;
}
public void deleteNode(String filename,int rowCount)
{
Document document=getDocument(filename);
NodeList nodelist=document.getElementsByTagName("anpai");
Node anpai_node=nodelist.item(rowCount);//anpai节点
anpai_node.getParentNode().removeChild(anpai_node);
updateXML(filename,document);
}
public void addNode(String filename,String date_str,String time_str,String activity_str)
{
Document document=getDocument(filename);
Node node=document.createElement("anpai");
Node node_child1=document.createElement("date");
Node node_child2=document.createElement("time");
Node node_child3=document.createElement("activity");
Text textnode_date=document.createTextNode(date_str);
Text textnode_time=document.createTextNode(time_str);
Text textnode_activity=document.createTextNode(activity_str);
node_child1.appendChild(textnode_date);
node_child2.appendChild(textnode_time);
node_child3.appendChild(textnode_activity);
node.appendChild(node_child1);
node.appendChild(node_child2);
node.appendChild(node_child3);
document.getDocumentElement().appendChild(node);
updateXML("src/schedule.xml",document);
}
public String[] getNodeInfoByRow(String filename,int rowcount)
{
Document document=getDocument(filename);
String date=document.getElementsByTagName("date").item(rowcount).getTextContent();
String time=document.getElementsByTagName("time").item(rowcount).getTextContent();
String activity=document.getElementsByTagName("activity").item(rowcount).getTextContent();
String []arr={date,time,activity};
return arr;
}
public void editNode(String filename,int whichnode,String e_date,String e_time,String e_activity)
{
Document document=getDocument(filename);
//System.out.println(document.getElementsByTagName("date").item(whichnode).getChildNodes().item(0).getNodeValue());
document.getElementsByTagName("date").item(whichnode).getChildNodes().item(0).setNodeValue(e_date);
document.getElementsByTagName("time").item(whichnode).getChildNodes().item(0).setNodeValue(e_time);
document.getElementsByTagName("activity").item(whichnode).getChildNodes().item(0).setNodeValue(e_activity);
updateXML(filename,document);
}
public void updateXML(String filename,Document document)
{
TransformerFactory tfactory=TransformerFactory.newInstance();
try {
Transformer transformer=tfactory.newTransformer();
DOMSource domsource=new DOMSource(document);
StreamResult result = new StreamResult(new File(filename));
try {
transformer.transform(domsource,result);
} catch (TransformerException e) {
e.printStackTrace();
}
} catch (TransformerConfigurationException e) {
e.printStackTrace();
}
}
}
继承AbstractTableModel:
package com.test.model;
import java.util.ArrayList;
import java.util.Vector;
import javax.swing.table.AbstractTableModel;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import com.test.parseXML.ParseXML;
public class ScheModel extends AbstractTableModel{
private Vector columnNames;
private Vector rowData;
public ScheModel()
{
init("");
}
public ScheModel(String date)
{
init(date);
}
public void init(String date)
{
rowData=new Vector();
columnNames=new Vector();
columnNames.add("日期");
columnNames.add("时间");
columnNames.add("事件");
if(date=="")
{
ParseXML parse=new ParseXML();
ArrayList<ArrayList> al=parse.getNodeInfo("src/schedule.xml");
for(int i=0;i<al.size();i++)
{
ArrayList<String> a=al.get(i);
Vector hang=new Vector();
for(int j=0;j<a.size();j++)
{
hang.add(a.get(j));
}
rowData.add(hang);
}
}
else
{
ParseXML parse=new ParseXML();
ArrayList<ArrayList> al=parse.getQueryNodeInfo("src/schedule.xml",date);
for(int i=0;i<al.size();i++)
{
ArrayList<String> a=al.get(i);
Vector hang=new Vector();
for(int j=0;j<a.size();j++)
{
hang.add(a.get(j));
}
rowData.add(hang);
}
}
}
@Override
public int getColumnCount() {
return columnNames.size();
}
@Override
public int getRowCount() {
return rowData.size();
}
@Override
public Object getValueAt(int arg0, int arg1) {
return ((Vector) rowData.get(arg0)).get(arg1);
}
@Override
public String getColumnName(int arg0) {
return (String) columnNames.get(arg0);
}
}
OK 剩下的代码就不上了