`

JDOM读取XML,并且创建XML

阅读更多
package com.brit.cx.common;

import java.io.ByteArrayInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Set;
import java.util.Vector;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;

import com.sun.org.apache.xpath.internal.axes.HasPositionalPredChecker;


public class ST {
 
 private static List listParentName = new ArrayList();
 private static String topParentName="";
 public static void main(String[] args) throws IOException {
  doXmlAndCreate("e:/1.xml","e:/create.xml");
 }

 private static boolean doXmlAndCreate(String path,String newPath) throws IOException{
  boolean bflag = false;
  //创建xml
  Element Row = new Element("Row");
  
  if(path!=null||!path.equals("")){
   byte[] a = Util.readFile(path);
   List<HashMap<String, String>> listObj = conteverByJdom(a);//得到数据集合
   Element [] root = new Element[listObj.size()];
   
   System.out.println(listObj.size()+"多少个");
   for (int i = 0; i < listObj.size(); i++) {
    root[i]=new Element(topParentName);
    //得到HashMAP
    HashMap<String, String> map =  listObj.get(i);
    Set keySet = map.keySet();   
             Object[] keyArray =  keySet.toArray();  // 此数组存放所有的HashMap中的键名
             String[] keys = new String[keySet.size()];
             Vector<String>   v = new   Vector();   ;   
             for(int j = 0 ; j < keyArray.length ; j++){     
                  keys[j] = keyArray[j].toString();           
             }
             
             //主节点 listParentName存储的父节点名字取出来
            
             for (int j = 0; j < keys.length; j++) {
              root[i].addContent(create(keys[j], map.get(keys[j])));
             }
             Row.addContent(root[i]);
             
   }
   
   bflag = createXML(Row,newPath);
   
  }
  
  return bflag;
 }
 
 /**
  * 通过Jdom将对应属性。
  * @param content
  * @throws IOException 
  */
 private static List<HashMap<String, String>> conteverByJdom(byte[] content) throws IOException {
  
  List<HashMap<String, String>> listRootData = new ArrayList<HashMap<String, String>>();
  
  System.out.println("通过Jdom将对应属性。");
  SAXBuilder builder = new SAXBuilder();
  ByteArrayInputStream bais = new ByteArrayInputStream(content);
  Document doc; 
  try {
   doc = builder.build(bais);
   Element root = doc.getRootElement();
   System.out.println("1.   " + root.getName());
   Element dataobjects = root.getChild("dataobjects");
   System.out.println("2.   " + dataobjects.getName() + " "
     + dataobjects.getText());
   Element dOMessageWrapper = dataobjects
     .getChild("DOMessageWrapper__");
   System.out.println("3.   " + dOMessageWrapper.getName());
   Element row = dOMessageWrapper.getChild("Row");
   System.out.println("4.   " + row.getName());
   Element data = row.getChild("data");
   System.out.println("5.   " + data.getName() + " "
     + data.getText());
   List dataList = data.getChildren();
   System.out.println("父级"+dataList.size()+"个");
   
   if(dataList.size()>0){
    
    for (int i = 0; i < dataList.size(); i++) {
     HashMap map = new HashMap();
     
     Element elem1 = (Element) dataList.get(i);
     
     System.out.println("父级别"+elem1.getName());
     topParentName=elem1.getName();
     
     List dataList2 = elem1.getChildren();
     
      if(dataList2.size()>0){
      
        for (int j = 0; j < dataList2.size(); j++) {
         Element elem2 = (Element)dataList2.get(j);
         elem2.getName();
         System.out.println("子级别"+elem2.getName());
           
           //打印节点下的name和value
           String name=elem2.getName();
           String value=elem2.getText();
           System.out.println(name+"---"+value);
           
           if(name.indexOf("_")>-1){
            map.put(name.substring(name.indexOf("_")+1), value);
            topParentName = name.substring(0, name.indexOf("_"));
           }else{
            map.put(name, value);
           }
           
        }
        listRootData.add(map);
       
      }
     }
     
    }
  } catch (JDOMException e) {
   e.printStackTrace();
  }
  return listRootData;
 }
 
 /**
  * @author zg
  * @description 创建XML
  * @param el :Element对象,xml中需要创建的元素.
  * @param newXmlPath :创建的xml生成到硬盘上的真实的绝对路径.
  * @return boolean
  */
 public static boolean createXML(Element el,String newXmlPath){
     boolean result=false;
     Document doc = new Document();
     doc.setContent(el);
     doc.toString();
     FileWriter writer;
     XMLOutputter outputter=new XMLOutputter();
     try {
      writer = new FileWriter(newXmlPath);
      Format format = Format.getRawFormat();// getCompactFormat();  getPrettyFormat(); getRawFormat();--可以实现标签内如果为空,则后面跟这</XX>标签
      //设置XML编码类型
      format.setEncoding("UTF-8");
      //设置缩进字符串            
      format.setIndent("  ");
      outputter.setFormat(format);
      outputter.output(doc, writer);
      writer.close();
      return result=true;
      
     } catch (Exception e) {
      e.printStackTrace();
     }
     return result;
 }
 
 /**
  * @author zg
 * 创建新节点
 * @param name 节点的名称
 * @param text 节点的内容
 * @return Element元素对象
 */
 private static Element create(String name, String text) {
    return new Element(name).setText(text);
 }

 
 
}

 

 

 

 

package com.brit.cx.common;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class Util {

public Util() {
}
/** *//**
   * 读取源文件内容
   * @param filename String 文件路径
   * @throws IOException
   * @return byte[] 文件内容
 * @throws IOException 
   */
public static byte[] readFile(String filename) throws IOException{

    File file =new File(filename);
    if(filename==null || filename.equals("")){
      throw new NullPointerException("无效的文件路径");
    }
    long len = file.length();
    byte[] bytes = new byte[(int)len];

    BufferedInputStream bufferedInputStream=new BufferedInputStream(new FileInputStream(file));
    int r = bufferedInputStream.read( bytes );
    if (r != len)
      throw new IOException("读取文件不正确");
    bufferedInputStream.close();

    return bytes;

}

/** *//**
   * 将数据写入文件
   * @param data byte[]
 * @throws IOException 
 * @throws IOException
   */
public static void writeFile(byte[] data,String filename) throws IOException{
    File file =new File(filename);
    file.getParentFile().mkdirs();
    BufferedOutputStream bufferedOutputStream=new BufferedOutputStream(new FileOutputStream(file));
    bufferedOutputStream.write(data);
    bufferedOutputStream.close();

}

/** *//**
   * 从jar文件里读取class
   * @param filename String
   * @throws IOException
   * @return byte[]
 * @throws IOException 
   */
public byte[] readFileJar(String filename) throws IOException{
    BufferedInputStream bufferedInputStream=new BufferedInputStream(getClass().getResource(filename).openStream());
    int len=bufferedInputStream.available();
    byte[] bytes=new byte[len];
    int r=bufferedInputStream.read(bytes);
    if(len!=r){
      bytes=null;
      throw new IOException("读取文件不正确");
    }
    bufferedInputStream.close();
    return bytes;
}

/** *//**
   * 读取网络流,为了防止中文的问题,在读取过程中没有进行编码转换,而且采取了动态的byte[]的方式获得所有的 byte返回
   * @param bufferedInputStream BufferedInputStream
   * @throws IOException
   * @return byte[]
 * @throws IOException 
   */
public byte[] readUrlStream(BufferedInputStream bufferedInputStream) throws IOException{
    byte[] bytes = new byte[100];
    byte[] bytecount=null;
    int n=0;
    int ilength=0;
    while((n=bufferedInputStream.read(bytes))>=0){
      if(bytecount!=null)
        ilength=bytecount.length;
      byte[] tempbyte=new byte[ilength+n];
      if(bytecount!=null){
        System.arraycopy(bytecount,0,tempbyte,0,ilength);
      }

      System.arraycopy(bytes,0,tempbyte,ilength,n);
      bytecount=tempbyte;

      if(n<bytes.length)
        break;
    }
    return bytecount;
}

}

 

附件里有上传XML和 JDOM解析和创建XML的例子

分享到:
评论

相关推荐

    jdom 读取XML 文件

    接下来,我们将详细介绍使用JDOM读取XML文件的步骤: 1. 加载XML文件:使用`SAXBuilder`类来读取XML文件并构建DOM树。如下所示: ```java import org.jdom2.Document; import org.jdom2.input.SAXBuilder; public...

    java利用jdom读取xml文件

    要使用JDOM读取XML文件,我们需要以下几个步骤: 1. 引入JDOM库:在项目中添加JDOM的依赖。如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml &lt;groupId&gt;org.jdom &lt;artifactId&gt;jdom2 &lt;version&gt;...

    用JDOM读取XML文件

    用JDOM读取XML文件 用JDOM读取XML文件用JDOM读取XML文件

    jdom学习读取xml文件.files

    本教程将深入探讨如何使用JDOM读取XML文件,并阐述其在Spring框架中的应用。 首先,我们了解JDOM的基本概念。JDOM提供了一种树型结构来表示XML文档,其中XML元素、属性、文本和注释等都对应于特定的Java对象。通过...

    jdom读取xml全属性文件

    使用JDOM读取XML文件的第一步是引入相关的库。如果你使用的是Maven项目,需要在pom.xml文件中添加JDOM依赖: ```xml &lt;groupId&gt;org.jdom &lt;artifactId&gt;jdom2 &lt;version&gt;2.0.6 ``` 然后,我们可以编写Java代码来...

    java读取XML(JDOM)

    要使用JDOM读取XML文件,首先需要导入必要的库: ```java import org.jdom2.Document; import org.jdom2.Element; import org.jdom2.input.SAXBuilder; ``` 然后,我们可以创建一个`SAXBuilder`实例,用于解析XML...

    jdom 读取修改xml文件

    然后创建了一个名为 `readXML` 的类,该类中的 `main` 方法展示了如何使用 JDOM 来读取一个名为 `text.xml` 的 XML 文件: ```java SAXBuilder sb = new SAXBuilder(); Document doc = sb.build(new FileInputStream...

    使用JDOM解析XML文件

    在Java编程中,JDOM(Java Document Object Model)是处理XML的一种库,它提供了方便的方式来创建、修改和读取XML文档。本篇文章将深入探讨如何使用JDOM解析XML文件。 首先,我们需要理解JDOM的基本结构。JDOM通过...

    jdom读取xml详细例子

    总的来说,JDOM 提供了一种直观且强大的方式来处理 XML 文档,无论是读取、创建还是查询,都能轻松应对。通过以上示例,你可以开始实践并深入了解 JDOM 的用法。在实际项目中,确保将 JDOM 相关的 jar 文件(如 jdom...

    java jdom解析xml

    Java JDOM解析XML是Java开发中处理XML文档的一种方法,JDOM全称为Java Document Object Model,它是一个基于Java语言的API,用于创建、修改和读取XML文档。JDOM为XML处理提供了一种高效且方便的解决方案,尤其适用于...

    jdom 读取,建立,修改 xml

    **JDOM读取XML** 在JDOM中,读取XML文档首先需要解析XML文件到一个`SAXBuilder`对象,然后通过这个对象构建一个`Document`对象。以下是一个基本的读取XML文件的示例: ```java import org.jdom2.*; import org....

    用jdom解析xml

    JDOM是一个专门为Java设计的API,它提供了一种高效、方便的方式来构建和读取XML文档。在这个教程中,我们将深入探讨如何在JSP(JavaServer Pages)环境中使用JDOM解析XML。 **1. JDOM基本概念** JDOM的核心在于两...

    jdom处理xml例子

    这个例子展示了如何使用JDOM读取、修改并保存XML文档。通过JDOM,我们可以轻松地处理XML数据,无论是简单的文档还是复杂的结构,都能得心应手。在实际项目中,根据需求选择适当的解析器,结合JDOM提供的API,可以...

    用jdom解析xml文件

    3. 读取XML文件并构建DOM树:`File xmlFile = new File("path_to_xml_file"); Document document = saxBuilder.build(xmlFile);` 4. 获取根元素:`Element rootElement = document.getRootElement();` 5. 遍历元素...

    jdom学习读取xml文件

    jdom学习读取xml文件资料小列子,非常简单明了。

    java,用jdom操作xml-创建,修改

    Java中的JDOM库是一个强大的工具,用于处理XML文档的创建、读取和修改。XML(eXtensible Markup Language)是一种被广泛应用于数据交换和存储的标记语言,它具有结构化和可扩展的特点。JDOM是Java的一个API,设计...

    jdom解析xml文件

    3. **加载XML文件**:使用`SAXBuilder`读取XML文件并构建`Document`对象。 ```java import java.io.File; File inputFile = new File("sample.xml"); Document document = saxBuilder.build(inputFile); ``` 4. *...

    JDOM操作xml文件的xmlBean

    JDOM的主要优势在于它具有良好的性能表现,并且提供了简洁直观的API来操作XML文档。 #### 二、JDOM的工作原理 JDOM的核心思想是通过构建一个轻量级的对象模型来表示XML文档。这使得开发人员能够非常直观地对XML文档...

    利用JDOM解析xml文件

    JDOM是Java中一个专门用来处理XML的库,它提供了一种高效且方便的方式来创建、修改和读取XML文档。本篇文章将深入探讨如何利用JDOM解析XML文件,并基于XML中的类名生成相应的对象。 首先,我们需要理解JDOM的基本...

Global site tag (gtag.js) - Google Analytics