jdom和dom4j读取xml文件以及生成xml文件的方法

来源:互联网 发布:php soapclient 编辑:程序博客网 时间:2024/05/18 02:27

 1、使用dom4j的方式遍历xml文件
  
   public class MyDom4J {

 public static void main(String[] args) throws Exception {  
 
  SAXReader reader = new SAXReader();//创建 SAXReader对象
  Document document = reader.read(new File("src/hibernate.hbm.xml"));//读取xml文件--创建Document对象
  Element rootElement = document.getRootElement();//获取根节点元素
  prin("根节点名--"+rootElement.getName());
  for(Iterator it = rootElement.elementIterator();it.hasNext(); ){//遍历根节点下面的子元素
   Element element = (Element) it.next();
   prin("子节点--"+element.getName());
   for(Iterator i = element.attributeIterator();i.hasNext();){//遍历子元素的属性名称及属性值
    Attribute attribute = (Attribute) i.next();
    prin("节点属性--"+attribute.getName()+"属性的值--"+attribute.getValue());//getName()取得节点的属性 getValue取得属性的值
   }
  }
 }
 
 public static void prin(Object o){ 
  System.out.println(o);
 }

}

 

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

2、使用jdom的方式遍历xml文件

 

public class MyJDom {
  
 public static void main(String[] args) throws Exception{      
     

        SAXBuilder sb=new SAXBuilder();//建立构造器 SAXBuilder
        Document doc=sb.build(new FileInputStream("src/jdomt.xml"));//读入指定文件
        Element root=doc.getRootElement();//获得根节点
        @SuppressWarnings("unchecked")
        List list=root.getChildren();//将根节点下的所有子节点放入List中
        for(int i=0;i<list.size();i++) {
            System.out.println("---------------------------");
            Element item=(Element)list.get(i);//取得节点实例
            String id=item.getAttribute("id").getValue();//取得属性值
            System.out.println("id-->"+id);

            Element sub=item.getChild("title");//取得当前节点的字节点
            String text=sub.getText();//取得当前节点的值
             System.out.println("Title-->"+text);
            if(item.getChild("content").getChildren().size()>0){
            Element sub2=item.getChild("content").getChild("name");
                String text2=sub2.getText();
                System.out.println("name-->"+text2);
            }
            Element sub3=item.getChild("email");
            String text3=sub3.getText();
            System.out.println("Email-->"+text3);
        }
      }
}

 

 

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//也可以使用xpath的方式读取配置文件属性
List<Node> list = document.selectNodes("//hibernate-mapping/class/property");
  for(Node n : list){
 System.out.println("节点名:"+n.getName()+"属性值:"+n.valueOf("@name"));
}
//这里需要添加jaxen-1.1-beta-7.jar包


////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

 

--使用jdom生成xml文件 // 模拟生成Hibernate映射文件
public class CreateXML { 
 public static void main (String[] args) throws Exception {
  createDocument();
 } 
 public static Document createDocument () throws Exception{
  Document document = DocumentHelper.createDocument();//使用DocumentHelp创建一个Document对象
  Element rootElement = document.addElement("hibernate-mapping");//创建根节点
  Element e = rootElement.addElement("class")//在根节点下添加子节点
  .addAttribute("name", "UserInfo")//class-属性name、table
  .addAttribute("table", "t_userinfo")
  .addElement("id").addAttribute("name", "id").addElement("generator").addAttribute("class", "native")//class下面子节点id--属性name value id
  //在class节点下添加新的节点
   .getParent().getParent().addElement("property")//property属性是id属性的兄弟节点
   .addAttribute("name", "type").addAttribute("name", "info");
  //可是使用链式编程
  //FileWriter out = new FileWriter("src/user.hbm.xml");
  OutputFormat format = OutputFormat.createPrettyPrint();
  XMLWriter writer = new XMLWriter(
   new FileWriter("src/user.hbm.xml"),format   
  );
  //document.write(out);
  writer.write(document);
  writer.close();
  //out.flush();
  //out.close();
  return document;
 }
}

 

 

总结:jdom和dom4j最明显的区别就是jdom是基于树的处理xnml的Java API,一次性把树加载到内存中.而dom4j它合并了许多超出基本 XML 文档表示的功能,包括集成的 XPath 支持、XML Schema 支持以及用于大文档或流化文档的基于事件的处理.在应用上都非常的方便,封装了底层的DOM和SAX,大大简化了编程工作!

 

原创粉丝点击