Java操作XML范例

最近在学习java,写了一个java操作xml实现公司员工管理的简单程序,注释很详细,希望能帮助初学者理解。

 

/**

 * 用W3C提供的Java操作XML方法重做ManageEmployee

 */

 

import java.io.DataInputStream;

import java.io.FileOutputStream;

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.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.NodeList;

import org.xml.sax.SAXException;

 

 

 

public class ManageEmployeeWithXML {

 

public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException, TransformerException {

DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();//载入xml解析器

    DocumentBuilder db=factory.newDocumentBuilder();//创建一个xml对象

    Element theEmployee=null, theElem=null, root=null;

    Document xmldoc=db.parse("f://employee.xml");//从xml对象获取dom实例

    root=xmldoc.getDocumentElement();//获得根

                      

/*输出命令菜单*/

System.out.println("===COMMAND LIST===/nadd: 添加一个员工/ndelete: 删除一个员工记录/nupdate: 修改员工信息/nshow: 打印员工信息/nhelp: 显示命令菜单/nexit:退出/n");

 

while(true){

String cmd;

           cmd =readDataFromKeybord("Please input command:");

if(cmd.equalsIgnoreCase("add")){

   System.out.println("Add  Employee:");

//从键盘获取新建的员工信息

String name=readDataFromKeybord("Name:"); 

String salary=readDataFromKeybord("Salary:");

String hireDay=readDataFromKeybord("hireDay:");   

//---  新建一个员工开始 ----

//创建名字项

theEmployee=xmldoc.createElement("Employee");

theElem=xmldoc.createElement("name");

theElem.setTextContent(name);

theEmployee.appendChild(theElem);//给Employee加入Element

               

//创建薪水项

theElem=xmldoc.createElement("salary");

theElem.setTextContent(salary);

theEmployee.appendChild(theElem);

 

//创建雇期项

theElem=xmldoc.createElement("hireday");

theElem.setTextContent(hireDay);

theEmployee.appendChild(theElem);

root.appendChild(theEmployee);//给根添加employee

System.out.println("--- 新建成功! ----");

//---  新建一个员工完成 ----

 

        continue;

}

if(cmd.equalsIgnoreCase("show")){

  NodeList nlEmployee=root.getElementsByTagName("Employee");//获取所有Employee结点

  System.out.println("---输出员工信息---");

  for(int i=0;i<nlEmployee.getLength();i++){  //依次访问之

  theEmployee=(Element) (nlEmployee.item(i));

  

  //依次访问子节点,获取内容并输出之

  printInformation(theEmployee,i);

  }

  

  continue;

}

if(cmd.equalsIgnoreCase("update")){

int i=Integer.parseInt(readDataFromKeybord("Input the number of the employee to delete:"));

//查询到所有Employee结点

NodeList nlEmployee=root.getElementsByTagName("Employee");    

//根据用户需求定位

theEmployee=(Element) nlEmployee.item(i-1);

System.out.println("---  查找No."+i+"员工信息 ----");

    

          while(true){

          printInformation(theEmployee,i-1);

          String item=readDataFromKeybord("Input the item to update: < name/ salary/ hireday >");

          if(item.equalsIgnoreCase("name")){

            theEmployee.getElementsByTagName("name").item(0).setTextContent(readDataFromKeybord("修改这位员工的名字为:"));

            System.out.println("---  修改成功 ----");           

       

          }

          else if(item.equalsIgnoreCase("hireDay")){

          theEmployee.getElementsByTagName("hireday").item(0).setTextContent(readDataFromKeybord("修改这位员工的雇期为:"));

            System.out.println("---  修改成功 !----");            

         

          }

          else if(item.equalsIgnoreCase("salary")){

          theEmployee.getElementsByTagName("salary").item(0).setTextContent(readDataFromKeybord("修改这位员工的薪金为:"));

          System.out.println("---  修改成功 ----");    

       

          }

           

          else System.out.println("没有找到修改项!");

          if(readDataFromKeybord("继续?<Y/N>").equalsIgnoreCase("n")) break;

          }

          continue;

}

if(cmd.equalsIgnoreCase("delete")){

int i=Integer.parseInt(readDataFromKeybord("Input the number of the employee to delete:"));

//查询到所有Employee结点

NodeList nlEmployee=root.getElementsByTagName("Employee");    

//根据用户需求定位

if(i<=0||i>=nlEmployee.getLength()){

System.out.println("Employee Not Foud!");

break;

}

theEmployee=(Element) nlEmployee.item(i-1);

System.out.print("---将要删除No."+i+"的信息:");

printInformation(theEmployee,i-1);

theEmployee.getParentNode().removeChild(theEmployee);//移除该结点

System.out.println("---  删除成功 ----");

continue;

}

if(cmd.equalsIgnoreCase("help")){

System.out.println("===COMMAND LIST===/nadd: 添加一个员工/ndelete: 删除一个员工记录/nupdate: 修改员工信息/nshow: 打印员工信息/nhelp: 显示命令菜单/nexit:退出/n");

continue;

}

if(cmd.equals("exit")){

Transformer   trans=TransformerFactory.newInstance().newTransformer(); 

trans.transform(new   DOMSource(xmldoc), new   StreamResult(new FileOutputStream("f://employee_modified.xml"))); 

System.out.println("信息已保存,退出程序!");

break;

}

System.out.println("Error Command!");

continue;

   }

}

 

 /*

  * 输出提示字符,并返回从键盘读入的信息  

  */

 private static String readDataFromKeybord(String prompt) throws IOException {

    System.out.print(prompt);

    String cmd=(new DataInputStream(System.in)).readLine();

       return cmd;

   }

   /*

    * 用于输出一个Employee节点下的所有信息,参数i为第i位员工

    */

   private static void printInformation(Element theEmployee,int i ) {

      Element theElem;

      theElem=(Element)(theEmployee.getElementsByTagName("name").item(0));

  System.out.print("No."+(i+1)+" 姓名:"+theElem.getTextContent());

  theElem=(Element)(theEmployee.getElementsByTagName("salary").item(0));

  System.out.print(" 薪水:"+theElem.getTextContent());

  theElem=(Element)(theEmployee.getElementsByTagName("hireday").item(0));

  System.out.println(" 雇期:"+theElem.getTextContent());

}

   

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Redission也有Java版本的客户端,可以用于Java应用程序中。下面是一个简单的使用Redission的Java示例: 首先,您需要在项目的Maven依赖中添加redission的Java客户端依赖: ```xml <dependency> <groupId>org.redisson</groupId> <artifactId>redisson</artifactId> <version>3.12.4</version> </dependency> ``` 然后,您可以使用以下代码创建一个Redisson客户端,并使用它来处理缓存和会话: ```java import org.redisson.Redisson; import org.redisson.api.RBucket; import org.redisson.api.RedissonClient; import org.redisson.config.Config; public class RedissonExample { public static void main(String[] args) { // 创建Redisson客户端 Config config = new Config(); config.useSingleServer().setAddress("redis://localhost:6379"); RedissonClient redisson = Redisson.create(config); // 在Redis中缓存一个Java对象 RBucket<MyObject> bucket = redisson.getBucket("my_object"); MyObject myObject = new MyObject("value"); bucket.set(myObject); // 从Redis中获取缓存的Java对象 MyObject cachedObject = bucket.get(); System.out.println(cachedObject.getValue()); // 使用Redisson处理会话 RMap<String, Object> session = redisson.getMap("my_session"); session.put("key", "value"); // 关闭Redisson客户端 redisson.shutdown(); } } class MyObject { private String value; public MyObject(String value) { this.value = value; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } } ``` 在这个例子中,我们首先创建了一个Redisson客户端,并使用它来缓存一个Java对象到Redis中,以及从Redis中获取缓存的Java对象。 然后,我们使用Redisson处理会话,使用`redisson.getMap()`方法获取一个Map对象,可以将其视为一个会话对象,并使用`put()`和`get()`方法来处理会话数据。 请注意,这只是一个简单的示例代码,您可能需要根据您的具体需求来修改它。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值