Dom的方式分割和拼接xml文件

1、分割已有xml文档(parent.xml)

要求:将parent.xml文件以指定标签中的 comp_name属性进行分割,相同属性放入同一文件中。

分割部分代码:

 //1.获取工厂
        DocumentBuilderFactory factory= DocumentBuilderFactory.newInstance();
        //2.产生解析器
        DocumentBuilder builder=factory.newDocumentBuilder();
        File file = new File("parent.xml");
        //3.解析xml文档,得到代表文档的document对象
        Document document=builder.parse(file);
     

//以下部分为了简洁,获取的节点名和List中顺序均已写死,为保证代码健壮性,建议各位用遍历和判断的方式
        NodeList nodelist = document.getElementsByTagName("purchaseOrder");
        
        //获取三个节点()
        Node ABCNode1 = nodelist.item(0);
        Node IBMNode = nodelist.item(1);
        Node ABCNode2 = nodelist.item(2);


2、拼接xml节点产生新文件

将分割后的节点进行拼接,生成新的文件并输出:

//创建新的xml并输出
        Document documentABC = builder.newDocument();
        //转换源文件的节点
        Node nodeABC1 = documentABC.adoptNode(ABCNode1);
        Node nodeABC2 = documentABC.adoptNode(ABCNode2);
        //创建跟节点
        Element rootElementABC = documentABC.createElement("purchaseOrders");
        Element childElementABC = documentABC.createElement("ABC_COMP");
        //拼装新的xml各个节点
        documentABC.appendChild(rootElementABC);
        rootElementABC.appendChild(childElementABC);
        childElementABC.appendChild(nodeABC1);
        childElementABC.appendChild(nodeABC2);
        
        Document documentIBM = builder.newDocument();
        //转换源文件的节点
        Node nodeIBM = documentIBM.adoptNode(IBMNode);
        //创建跟节点
        Element rootElementIBM = documentIBM.createElement("purchaseOrders");
        Element childElementIBM = documentIBM.createElement("IBM_COMP");
        //拼装新的xml各个节点
        documentIBM.appendChild(rootElementIBM);
        rootElementIBM.appendChild(childElementIBM);
        childElementIBM.appendChild(nodeIBM);
        
        //将内存中修改后的doucement写入xml文档
        //获取工厂
        TransformerFactory transformerFactory=TransformerFactory.newInstance();
        Transformer transformer = transformerFactory.newTransformer();

        //设置编码等文件信息
        transformer.setOutputProperty(OutputKeys.ENCODING, "UTF8");
        //创建输出
        DOMSource domSourceABC = new DOMSource(documentABC);
        StreamResult resultABC = new StreamResult(new File("ABC_COMP.xml"));
        DOMSource domSourceIBM = new DOMSource(documentIBM);
        StreamResult resultIBM = new StreamResult(new File("IBM_COMP.xml"));
        
        try{
        transformer.transform(domSourceABC, resultABC);
        transformer.transform(domSourceIBM, resultIBM);
        }catch(TransformerException e){
        e.printStackTrace();
        }


注意:获取分割后的节点,放入新创建的文本节点中时,必须调用 Document 的 adoptNode()方法,否则会报文本节点不一致异常。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值