解决方案 »
- 易趣网站的中间5个栏目图片交替显示是如何实现的?
- chm重新编译后没有上样式的问题
- 100分紧急求助!select multiple赋值问题
- 怎么做像本论坛左边那样的树啊。
- JBuilder安装问题
- 如何转换换行符
- 为什么我的按钮不能提交<form>的数据。
- 安装jakarta-tomcat-4.0.3 的JAVA_HOME环境变量在那个文件设置
- <a href=admin_cat_add.jsp?add=2&sort_id=<%=rs.getString("sort_id")%>>
- 包含自定义类的Map如何转换成JSON?
- 关于Glassfish热部署的问题
- java 怎么抓取asp.net的网页内容啊?
====================================
当作为一个org.w3c.dom文档被解析到内存中时,firstname元素有一个是TEXT_NODE类型的子节点。程序员也许会被引导使用以下的Java代码来获得firstname字符串。
// where fnE is the firstname org.w3c.dom.Element reference
String name = fnE.getFirstChild().getNodeValue();
使用类似的代码来设置firstname的新值。
fnE.getFirstChild().setNodeValue( newfirstname );
这段代码将会被编译并看起来能正确的工作,直到有一天由于某种原因一个空字符串被负值给了这个文本节点。当该文本仍然在内存中时,上面的代码将会继续工作。但是当该文档被一个转换器序列化为一个文档的时候,被序列化的并不是所期望的文档:
< firstname>< /firstname>
实际上你能得到的是:
< firstname/>
转换器意识到firstname元素为空,并考虑了这种首选的形式。现在当这个校订的文档再次被解析进入内存的时候,那个firstname元素就不再含有一个子节点,并且下面这个语句——
String f = fnE.getFirstChild().getNodeValue();
——只会给程序员一个令人厌恶的打击,导致一个NullPointerException异常
解决的办法当然就是防御性的进行编码,确认子节点的 存在并证明它的默认值不存在。例如,使用下面的代码来获得firstname。
// where fnE is the firstname org.w3c.dom.Element reference
Node fnNode = fnE.getFirstChild();
if( fnNode == null ){ name= "" ;
} else { name = fnNode.getNodeValue();
}
if("".equals(str)){}else{
str.tirm();
}
注意: if 中建议“”.equal() 这样写,用空和对比 str ,而不用str 里对比空,这样可以避免 一些问题。