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

Java解析XML失败求助:提取SOAP响应中的ResponseCode与Remark

如何从嵌套在CDATA中的SOAP响应XML提取ResponseCode和Remark

你遇到的问题核心在于:目标节点被包裹在CDATA区块里了!外层的DOM解析器会把CDATA内的内容当成纯文本,而不是XML结构的一部分,所以直接调用getElementsByTagName肯定找不到<ResponseCode>和<Remark>。

解决思路是先把CDATA里的XML字符串提取出来,再单独解析这个字符串成新的DOM文档,之后就能正常获取节点内容了。

下面是修改后的完整代码:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder builder; 
try { 
    builder = factory.newDocumentBuilder(); 
    // 解析外层SOAP响应
    Document doc = builder.parse(new InputSource(new StringReader(response))); 
    
    // 第一步:获取GetIMEIInfoResult节点的文本内容(也就是CDATA里的XML字符串)
    NodeList resultList = doc.getElementsByTagName("GetIMEIInfoResult"); 
    String cdataXml = resultList.item(0).getTextContent().trim(); 
    
    // 第二步:把CDATA里的字符串解析成新的XML文档
    Document innerDoc = builder.parse(new InputSource(new StringReader(cdataXml))); 
    
    // 第三步:现在可以正常获取ResponseCode和Remark了
    Node responseCodeNode = innerDoc.getElementsByTagName("ResponseCode").item(0); 
    Node remarkNode = innerDoc.getElementsByTagName("Remark").item(0); 
    
    System.out.println("ResponseCode: " + responseCodeNode.getTextContent()); 
    System.out.println("Remark: " + remarkNode.getTextContent()); 
} catch (Exception e) { 
    e.printStackTrace(); 
}

额外提醒两点:

  • 记得处理节点可能为null的情况(比如CDATA内容格式错误时),避免空指针异常。
  • 如果后续遇到带命名空间的XML结构,可能需要替换成getElementsByTagNameNS方法来定位节点,但这个案例里内层XML没有命名空间,直接用getElementsByTagName就可行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:57:13