Java中如何保留<br />标签获取文本?getTextContent会剥离标签
解决保留
标签提取内容的问题
标签提取内容的问题
问题根源
getNodeValue()不适用于元素节点:<td>属于元素节点,调用它的getNodeValue()会返回null,这就是你数据库报错的直接原因——你把null转成字符串传入了数据库。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
相关产品推荐
相关产品推荐

