Jdom操作xml,按照指定要求分类

来源:互联网 发布:必赢客软件 编辑:程序博客网 时间:2024/05/17 09:30

转自本人博客:http://www.xgezhang.com/jdom_xml_separate.html

    JDOM是两位著名的 Java 开发人员兼作者,Brett Mclaughlin 和 Jason Hunter 的创作成果, 2000 年初在类似于Apache协议的许可下,JDOM作为一个开放源代码项目正式开始研发了。它已成长为包含来自广泛的 Java 开发人员的投稿、集中反馈及错误修复的系统,并致力于建立一个完整的基于 Java 平台的解决方案,通过 Java 代码来访问、操作并输出 XML 数据。

   JDOM在对xml文件的操作上面,比DOM更方便快速,并且能够解决SAX模型不能对文件进行修改操作的弊端。

   这里要实现的功能和http://www.xgezhang.com/dom4j_xml_separata.html里描述的一样,只是选用的包不同,有些具体的细节需要注意,代码如下:

  
package project1; import java.io.FileOutputStream;import java.util.Iterator;import java.util.List; import org.jdom.Attribute;import org.jdom.Document;import org.jdom.Element;import org.jdom.input.SAXBuilder;import org.jdom.output.Format;import org.jdom.output.XMLOutputter; public class jdom {    static String compMode = ""; //静态全局变量,对应按不同公司分类的方式    static Document docABC =  new Document();    static Document docIBM = new Document();    public static void outputer(Document document,String filename) throws Exception{ //输出 xml文件        XMLOutputter out = new XMLOutputter();        Format format = Format.getPrettyFormat();        format.setIndent("   ") ;         out.setFormat(format);         out.output(document, new FileOutputStream(filename));     }         public static void separate(Element node,Element compNode) throws Exception{ //递归遍历函数         List<Attribute> attrList = node.getAttributes(); //获取节点所有的属性元素        int attrListSize = attrList.size();                 for (int j=0; j<attrListSize; j++) {            Attribute attr = (Attribute) attrList.get(j);            if (node.getName().equals("purchaseOrder")){ //要实现的功能是选出属性名为IBM或ABC的purchaseOrder节点                if (!attr.getValue().equals(compMode)) return;            } else {                Element newAttrElement = new Element(attr.getName().toString());                newAttrElement.setText(attr.getValue().toString());                compNode.addContent(newAttrElement); //addContent为添加节点,这里是将属性转化为节点                //System.out.println("当前公司添加的子节点为:"+compNode.getChild(attr.getName()).getName());            }        }                     if (!(node.getTextTrim().equals(""))) {             compNode.setText(node.getText());            //System.out.println("公司对象添加了"+node.getText());        }                 List <Element> nodeChildren = node.getChildren();  //获取子节点的list集合        int listsize = nodeChildren.size();                 for (int i=0; i<listsize; i++) {             Element child = (Element) nodeChildren.get(i).clone(); //注意这里一定是子节点的拷贝            if (node.getName().equals("purchaseOrders")) separate(child,compNode); else {                //System.out.println("当前子节点为"+child.getName());                compNode.addContent(new Element(child.getName().toString()));                int lastChild = compNode.getChildren().size();                Element nextCompNode = (Element) compNode.getChildren().get(lastChild-1); //getChildren函数是获取所有子节点,当前调用最后一个                separate(child,nextCompNode);            }        }    }         public static void main(String[] args) throws Exception {        SAXBuilder builder = new SAXBuilder(false);        Document doc  = builder.build("/home/workspace/xmlWebservice-Project1/asset/ipo.xml");        Element node = doc.getRootElement();  //初始文件的读取                 Element ABCRoot = new Element("purchaseOrders");        docABC.addContent(ABCRoot);        ABCRoot.addContent(new Element("ABC_COMP"));//初始化设置ABC_COMP的开始元素        Element ABCNode = ABCRoot.getChild("ABC_COMP");        ABCNode.addContent(new Element("purchaseOrder"));        ABCNode = ABCNode.getChild("purchaseOrder");                 Element IBMRoot = new Element("purchaseOrders");        docIBM.addContent(IBMRoot);        IBMRoot.addContent(new Element("IBM_COMP"));//初始化设置IBM_COMP的开始元素        Element IBMNode = IBMRoot.getChild("IBM_COMP");        IBMNode.addContent(new Element("purchaseOrder"));        IBMNode = IBMNode.getChild("purchaseOrder");                 compMode = "ABC";        separate(node, ABCNode);        outputer(docABC,"/home/workspace/xmlWebservice-Project1/asset/ABC_COMP_jdom.xml"); //输出文件                 compMode = "IBM";        separate(node, IBMNode);        outputer(docIBM,"/home/workspace/xmlWebservice-Project1/asset/IBM_COMP_jdom.xml");             }}


0 0