分类: Java
2008-12-10 12:37:35
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import org.w3c.dom.*;
import org.xml.sax.SAXException;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.*;
import javax.xml.xpath.*;
public class testXmlRoles {
public static void main(String[] args) {
if(args.length>0){
String method = args[0];
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
//根节点
Element root = null;
//子节点
Element theRole = null;
//子节点元素
Element theElem = null;
try {
factory.setIgnoringElementContentWhitespace(true);
DocumentBuilder db = factory.newDocumentBuilder();
Document xmldoc = db.parse(new File("Test.xml"));
root = xmldoc.getDocumentElement();
//--- 新建一角色(子节点) ----
//调用格式 :java TestXmlRoles add newrole 12 123456
if(method.equals("add")){
if(args.length!=4){
System.out.println("请输入四个参数:格式例如-->java TestXmlRoles add newrole 12 123456");
}else{
theRole = (Element) selectSingleNode("/roles/role[name='" + args[1] + "' and id='"+args[2]+"']", root);
if(theRole!=null){
System.out.println("---该name或者id已经存在,请另设----");
}else{
theRole = xmldoc.createElement("role");
//附加子节点元素
theElem = xmldoc.createElement("name");
theElem.setTextContent(args[1]);
theRole.appendChild(theElem);
theElem = xmldoc.createElement("id");
theElem.setTextContent(args[2]);
theRole.appendChild(theElem);
theElem = xmldoc.createElement("pas");
theElem.setTextContent(args[3]);
theRole.appendChild(theElem);
//根节点附加子节点
root.appendChild(theRole);
output(xmldoc);
saveXml("Test.xml", xmldoc);
System.out.println("---添加成功----");
}
}
}
//--- 要用id属性删除角色 ----
//调用格式 :java TestXmlRoles delbyid 12
else if (method.equals("delbyid")) {
if (args.length != 2) {
System.out.println("请输入id:格式例如-->java TestXmlRoles delbyid 12");
} else {
theRole = (Element) selectSingleNode("/roles/role[id='"+ args[1] + "']", root);
if (theRole != null) {
theRole.getParentNode().removeChild(theRole);
saveXml("Test.xml", xmldoc);
System.out.println("---删除成功----");
} else {
System.out.println("--不存在该id的角色 ----");
}
}
}
//--- 要用name属性删除角色 ----
//调用格式 :java TestXmlRoles delbyname newrole
else if (method.equals("delbyname")) {
if (args.length != 2) {
System.out.println("请输入name参数:格式例如-->java TestXmlRoles delbyname newrole");
} else {
theRole = (Element) selectSingleNode("/roles/role[name='" + args[1] + "']", root);
if (theRole != null) {
theRole.getParentNode().removeChild(theRole);
saveXml("Test.xml", xmldoc);
System.out.println("---删除成功----");
} else {
System.out.println("---不存在名称对应的角色----");
}
}
}
//根据name查找id,pas
//调用格式 java TestXmlRoles findbyname newrole
else if (method.equals("findbyname")) {
if (args.length != 2) {
System.out.println("请输入name参数:格式例如-->java TestXmlRoles findbyname newrole");
} else {
theRole = (Element) selectSingleNode("/roles/role[name='" + args[1] + "']", root);
if (theRole != null) {
// getElementsByTagName返回的是NodeList,所以要跟上item(0)
String password = theRole.getElementsByTagName("pas").item(0).getTextContent();
String id = theRole.getElementsByTagName("id").item(0).getTextContent();
System.out.println("--- 对应角色id 和密码:----" + id+ "," + password);
} else {
System.out.println("---不存在该名称的角色---");
}
}
}
// 根据id查找name,pas
// 调用格式 java TestXmlRoles findbyid 30
else if (method.equals("findbyid")) {
if (args.length != 2) {
System.out.println("请输入id参数:格式例如-->java TestXmlRoles findbyid 30");
} else {
theRole = (Element) selectSingleNode("/roles/role[id='"+ args[1] + "']", root);
if(theRole!=null){
//getElementsByTagName返回的是NodeList,所以要跟上item(0)
String password = theRole.getElementsByTagName("pas").item(0).getTextContent();
String name = theRole.getElementsByTagName("name").item(0).getTextContent();
System.out.println("--- 对应角色id 和密码:----" + name + ","+ password);
}else{
System.out.println("---没有找到相关记录---");
}
}
}
// --- 根据name对role做一些修改。 ----
//调用格式 java TestXmlRoles editbyname cs 8888888
else if(method.equals("editbyname")){
if(args.length!=2){
System.out.println("请输入name参数:格式例如-->java TestXmlRoles editbyname cs 8888888");
}else{
theRole = (Element) selectSingleNode("/roles/role[name='"+args[1]+"']",root);
if(theRole!=null){
//--- 修改角色密码 -----
//getElementsByTagName返回的是NodeList,所以要跟上item(0)
theRole.getElementsByTagName("pas").item(0).setTextContent(args[2]);
/*// --- 给节点加一个属性'id',值为B01 ----
theRole.setAttribute("id", "B01");
output(theRole);*/
saveXml("Test.xml", xmldoc);
}else{
System.out.println("---没有找到相关记录---");
}
}
}
//批量删除
//调用格式 java TestXmlRoles delbanch id<10
else if(method.equals("delbanch")){
if(args.length!=2){
System.out.println("请输入删除条件:格式例如-->java TestXmlRoles delbanch id<10");
}else{
//NodeList someRoles = selectNodes("/roles/role[id<10]", root);
NodeList someRoles = selectNodes("/roles/role["+args[2]+"]", root);
System.out.println("--- 符合条件的角色有 " + someRoles.getLength()+ "个 ---");
for (int i = 0; i < someRoles.getLength(); i++) {
someRoles.item(i).getParentNode().removeChild(someRoles.item(i));
}
saveXml("Test.xml", xmldoc);
}
}else{
System.out.println("--- 请输入正确的方法名称---");
}
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} else {
System.out.println("调用该程序需要输入相关参数:格式例如-->java TestXmlRoles add newrole 12 123456");
}
}
// 将node的XML字符串输出到控制台
public static void output(Node node) {
TransformerFactory transFactory = TransformerFactory.newInstance();
try {
Transformer transformer = transFactory.newTransformer();
transformer.setOutputProperty("encoding", "gb2312");
transformer.setOutputProperty("indent", "yes");
DOMSource source = new DOMSource();
source.setNode(node);
StreamResult result = new StreamResult();
result.setOutputStream(System.out);
transformer.transform(source, result);
} catch (TransformerConfigurationException e) {
e.printStackTrace();
} catch (TransformerException e) {
e.printStackTrace();
}
}
// 查找节点,并返回第一个符合条件节点
public static Node selectSingleNode(String express, Object source) {
Node result = null;
XPathFactory xpathFactory = XPathFactory.newInstance();
XPath xpath = xpathFactory.newXPath();
try {
result = (Node) xpath.evaluate(express, source, XPathConstants.NODE);
} catch (XPathExpressionException e) {
e.printStackTrace();
}
return result;
}
// 查找节点,返回符合条件的节点集。
public static NodeList selectNodes(String express, Object source) {
NodeList result = null;
XPathFactory xpathFactory = XPathFactory.newInstance();
XPath xpath = xpathFactory.newXPath();
try {
result = (NodeList) xpath.evaluate(express, source,XPathConstants.NODESET);
} catch (XPathExpressionException e) {
e.printStackTrace();
}
return result;
}
// 将Document输出到文件
public static void saveXml(String fileName, Document doc) {
TransformerFactory transFactory = TransformerFactory.newInstance();
try {
Transformer transformer = transFactory.newTransformer();
transformer.setOutputProperty("indent", "yes");
DOMSource source = new DOMSource();
source.setNode(doc);
StreamResult result = new StreamResult();
result.setOutputStream(new FileOutputStream(fileName));
transformer.transform(source, result);
} catch (TransformerConfigurationException e) {
e.printStackTrace();
} catch (TransformerException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
XML文件: