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

本文介绍了一种使用Java实现的XML文档分割与重组的方法。通过指定属性将原始XML文档分割成多个子文档,并将这些子文档按需重新组合成新的XML文件。此过程包括解析XML文档、提取所需节点、创建新文档及输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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()方法,否则会报文本节点不一致异常。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值