【发布时间】:2014-11-12 08:05:36
【问题描述】:
我有以下来自 web 服务调用响应的字符串 CDATA 格式。
String outputString = "<![CDATA[<MYTAG><MYTAG1 type=\"java.util.vector\"><MyTAG2 type=\"java.util.hashtable\"><NAME type=\"java.lang.string\">XYZ</NAME><ADDRESS type=\"java.lang.string\">ABCD</ADDRESS></MYTAG2></MYTAG1></MYTAG>]]>"
当我尝试使用 DOM 解析器时。这个字符串给出了异常。
DocumentBuilder builder;
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
builder = factory.newDocumentBuilder();
Document outputXMLDocument = builder.parse(new InputSource(new StringReader(outputString)));
NodeList nodes = outputXMLDocument.getElementsByTagName("MYTAG");
我想解析这个响应并检索 NAME 和 ADDRESS TAG 的值。请建议处理此问题的最佳方法。
【问题讨论】:
-
请检查这个 SO 问题 - stackoverflow.com/questions/8489151/how-to-parse-xml-for-cdata 这可能会有所帮助。
-
该 CDATA 值必须来自 XML 文件,作为封闭节点的文本值。当您解析包含的 XML 时,您将拥有一个文本节点。启动另一个
DocumentBuilder并将从文本节点中提取的字符串值提供给它。那时,它不会是 CDATA 部分,因为 CDATA 仅存在于文档的序列化版本中,从不在 DOM 中。 -
响应 web 服务调用。我没有任何节点在 CDATA 之前。正如我提到的那样,它只有字符串 String outputString = "
]] >"XYZ ABCD