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

Java DOM中如何将XML字符串作为子元素插入而非转义文本?

解决XML字符串添加到命名空间元素时标签被转义的问题

用setTextContent()方法把XML格式字符串添加到<ns1:FIToFI>元素时,标签会被转成&lt;和&gt;——这是因为setTextContent()本来就是用来设置纯文本内容的,它会自动转义所有XML特殊字符。要保留原XML结构,得把字符串解析成DOM节点再插入,而不是当成文本处理。

具体实现步骤(以Java DOM API为例)

  • 先把XML字符串解析成独立的DOM文档
  • 将解析后的节点导入到目标文档的上下文(不同文档的节点不能直接复用)
  • 把导入后的节点添加到<ns1:FIToFI>元素下
// 假设已存在目标文档doc,以及获取到的<ns1:FIToFI>元素fitoFiElement
String grpHdrXml = "<GrpHdr><MsgId>MQSECJYJHRBPDTZTYNNEYXOZUPAUDEKVDFV</MsgId><CreDtTm>2023-02-02T21:48:58.075+05:30</CreDtTm></GrpHdr>";

// 1. 解析XML字符串为DOM节点
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
InputSource xmlInput = new InputSource(new StringReader(grpHdrXml));
Document grpHdrDoc = builder.parse(xmlInput);
Node grpHdrRoot = grpHdrDoc.getDocumentElement();

// 2. 导入节点到目标文档(true表示递归导入所有子节点)
Node importedGrpHdr = doc.importNode(grpHdrRoot, true);

// 3. 添加到<ns1:FIToFI>元素中
fitoFiElement.appendChild(importedGrpHdr);

注意事项

  • 必须调用importNode(),因为不同Document对象的节点属于不同的DOM上下文,直接调用appendChild()会抛出异常
  • 如果<GrpHdr>需要指定命名空间,可以开启DocumentBuilderFactory的命名空间感知:factory.setNamespaceAware(true);,然后在解析后的节点上设置对应的namespaceURI

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 15:05:17