You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Java读取XML文件并提取指定标签内容写入新XML文件

Java 提取XML指定标签生成新文件实现方案

首先给出示例原Xmlfile.xml参考结构:

<?xml version="1.0" encoding="UTF-8"?>
<users>
    <user>
        <id>1</id>
        <name>张三</name>
        <age>25</age>
        <email>zhangsan@example.com</email>
    </user>
    <user>
        <id>2</id>
        <name>李四</name>
        <age>30</age>
        <email>lisi@example.com</email>
    </user>
</users>

以下是基于JDK自带DOM解析器的实现方案,无需引入第三方依赖,适合中小体积XML文件处理:

实现步骤

  • 加载原XML文件到DOM文档对象
  • 创建新的DOM文档对象作为输出载体
  • 从原文档中筛选出所有email标签节点
  • 将筛选到的节点导入新文档后写入到目标文件

完整代码

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.File;

public class ExtractXmlTag {
    public static void main(String[] args) {
        try {
            // 加载源XML文件
            File sourceFile = new File("Xmlfile.xml");
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = factory.newDocumentBuilder();
            Document sourceDoc = builder.parse(sourceFile);
            sourceDoc.getDocumentElement().normalize();

            // 初始化目标XML文档
            Document targetDoc = builder.newDocument();
            Element root = targetDoc.createElement("emails");
            targetDoc.appendChild(root);

            // 提取所有email标签并导入目标文档
            NodeList emailNodes = sourceDoc.getElementsByTagName("email");
            for (int i = 0; i < emailNodes.getLength(); i++) {
                Node importNode = targetDoc.importNode(emailNodes.item(i), true);
                root.appendChild(importNode);
            }

            // 输出到新文件
            Transformer transformer = TransformerFactory.newInstance().newTransformer();
            // 设置输出格式化缩进
            transformer.setOutputProperty(OutputKeys.INDENT, "yes");
            transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
            transformer.transform(new DOMSource(targetDoc), new StreamResult(new File("newxmlfile.xml")));

            System.out.println("新文件生成完成");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

注意:如果需要保留email标签的上层父节点结构,只需要在筛选节点时同步复制对应父节点到新文档即可,上述示例默认将所有email标签统一放在新的根节点下。

大文件处理提示

如果需要处理GB级别的超大XML文件,建议使用SAX解析器实现,逐行扫描源文件,仅遇到目标标签时写入新文件,避免内存溢出。

生成的newxmlfile.xml示例输出

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<emails>
  <email>zhangsan@example.com</email>
  <email>lisi@example.com</email>
</emails>

内容的提问来源于stack exchange,提问作者GAJENDRAN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 03:06:04