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

Java中如何保留<br />标签获取文本?getTextContent会剥离标签

解决保留
标签提取内容的问题

问题根源

  1. getNodeValue() 不适用于元素节点:<td> 属于元素节点,调用它的 getNodeValue() 会返回 null,这就是你数据库报错的直接原因——你把 null 转成字符串传入了数据库。
  2. getTextContent() 会剥离所有标签:它会提取所有子节点的纯文本并合并,自然会丢失 <br> 这类格式标签。

解决方案:遍历子节点拼接内容

要保留 <br> 标签,需要遍历 <td> 的所有子节点,区分文本节点和 <br> 元素节点,分别处理后拼接成最终内容:

var nodeList = root.getElementsByTagName("tr");
var nodeCount = nodeList.getLength();
for (row = 0; row < nodeList.getLength(); row++) {
    var node = nodeList.item(row);
    // 处理Key部分(和原有逻辑一致)
    var DOORSKey = new java.lang.String(node.getElementsByTagName("td").item(0).getTextContent().trim());
    var DOORSKeyCount = DOORSKey.length();
    
    // 处理Value部分:保留<br>标签
    var tdNode = node.getElementsByTagName("td").item(1);
    var childNodes = tdNode.getChildNodes();
    var contentBuilder = new java.lang.StringBuilder();
    
    for (var i = 0; i < childNodes.getLength(); i++) {
        var child = childNodes.item(i);
        // 文本节点:追加内容
        if (child.getNodeType() == Node.TEXT_NODE) {
            contentBuilder.append(child.getNodeValue());
        }
        // <br>元素节点:追加<br>字符串
        else if (child.getNodeName().equalsIgnoreCase("br")) {
            contentBuilder.append("<br>");
        }
    }
    var DOORSVal = new java.lang.String(contentBuilder.toString());
    // 后续数据库操作...
}

说明

  • 遍历 <td> 的子节点,判断节点类型:文本节点直接取内容,<br> 元素则手动追加 <br> 字符串。
  • 用 StringBuilder 拼接效率更高,避免多次字符串拼接的性能损耗。
  • 针对你提供的示例HTML,处理后 XML Profile 对应的 DOORSVal 会完整保留所有 <br> 标签,和原HTML中的格式一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 02:58:22