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

如何用Java从XML中获取带标签的完整内容?

获取XML中标签的完整带标签内容

嘿,这个问题我太熟悉了!getTextContent()方法的设计就是只提取节点下的纯文本内容,所以它会自动忽略掉子标签。要拿到包含<p>在内的完整内容,咱们可以借助Transformer把<content>的子节点转换成XML字符串,具体修改如下:

修改后的完整代码示例

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

public class XmlParser {
    public static void main(String[] args) {
        try {
            File fXmlFile = new File("./Index.xml");
            DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
            // 注意:如果XML里有命名空间,可能需要设置dbFactory.setNamespaceAware(true);
            DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
            Document doc = dBuilder.parse(fXmlFile);
            doc.getDocumentElement().normalize();

            // 获取<content>节点
            NodeList contentNodes = doc.getElementsByTagName("content");
            if (contentNodes.getLength() > 0) {
                Node contentNode = contentNodes.item(0);
                
                // 使用Transformer将节点的子节点转换成字符串
                TransformerFactory transformerFactory = TransformerFactory.newInstance();
                Transformer transformer = transformerFactory.newTransformer();
                // 可选:设置输出格式,比如去掉多余的换行和空格
                // transformer.setOutputProperty(OutputKeys.INDENT, "no");
                DOMSource source = new DOMSource(contentNode.getFirstChild()); // 取content的子节点(也就是<p>hello</p>)
                StringWriter writer = new StringWriter();
                StreamResult result = new StreamResult(writer);
                transformer.transform(source, result);
                
                // 输出完整的带标签内容
                String fullContent = writer.toString();
                System.out.println("完整内容:" + fullContent);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

关键步骤说明

  • 首先通过getElementsByTagName("content")定位到目标节点
  • 用Transformer把<content>的子节点(也就是你要的<p>hello</p>)转换成XML字符串,而不是直接取文本
  • 如果需要控制输出格式(比如去掉缩进),可以添加transformer.setOutputProperty()相关配置

补充小技巧

如果你的<content>标签下有多个子节点,直接用new DOMSource(contentNode)的话,会连<content>标签本身一起输出。如果只需要内部内容,就用contentNode.getFirstChild()(如果只有一个子节点),或者遍历所有子节点逐个转换拼接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:54:04