当点击'&'时,DocumentBuilder解析会中断字符串

时间:2011-03-03 14:02:48

标签: java xml parsing dom escaping

我有这个xml:
<user>
<name>H &amp; M</name>

我用这段代码解析它:


    DocumentBuilder documentBuilder = null;
            Document document = null;

try { documentBuilder = DocumentBuilderFactory.newInstance() .newDocumentBuilder(); document = documentBuilder.parse(is); } catch (Exception e) { return result; } NodeList nl = document.getElementsByTagName(XML_RESPONSE_ROOT); if (nl.getLength() > 0) { resp_code = nl.item(0).getAttributes().getNamedItem( XML_RESPONSE_STATUS).getNodeValue(); if (resp_code.equals(RESP_CODE_OK_SINGLE)) { nl = document .getElementsByTagName(XML_RESPONSE_TAG_CONTACT); NodeList values = nl.item(i).getChildNodes();

等。

当我得到节点值时:node.getNodeValue();

我只得到&符号之前的内容,即使&符号被转义

我想得到整个字符串:“H&amp; M”

感谢

2 个答案:

答案 0 :(得分:4)

这取决于XML文档的构造方式。特别是,它可以在“H&amp; M”中具有多个辅助文本节点,而您的代码期望它只是一个。尝试在获取其值之前使用nodeVariable.normalize()。

根据DOM解析器API:“normalize() - 将此节点下的子树的完整深度中的所有Text节点(包括属性节点)放入只有结构的”正常“形式(例如,元素,注释) ,处理指令,CDATA部分和实体引用)分隔Text节点,即既没有相邻的Text节点也没有空的Text节点......“

答案 1 :(得分:0)

找到“name”元素并调用getTextContent()