为什么node.getNodeValue()的值为空??
下面 是代码:
package com.cq.util.xml;import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;import org.apache.log4j.Logger;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;public class OperatorXml {
private String file;
private String formData="formData";
/*
 * 解析xml文件
 * */
public List readXML(String path){
Logger log=Logger.getLogger("----------read xml file:"+getClass().toString()+"------------");
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db=null;
List list;
try {
db = dbf.newDocumentBuilder();
log.info(getClass().toString()
+ ": create DocumentBuilder Object successed........");
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
log.debug(getClass().toString()
+ ": create DocumentBuilder Object failed...........");
e.printStackTrace();
}
try {
InputStream is=new FileInputStream(path);
org.w3c.dom.Document doc=db.parse(is);
        log.info("read xmlfile success");
        list=read(doc,log);//解析
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
log.debug("read xmlfile fail");
e.printStackTrace();
}
return null;
}
private List read(org.w3c.dom.Document doc,Logger log){
Element root=doc.getDocumentElement();
NodeList formDatas=root.getElementsByTagName(formData);
for(int i=0;i<formDatas.getLength();i++){
Node formData=formDatas.item(i);
formData.getNodeType();
// NodeList childformDatas=formData.getChildNodes();
for(Node node=formData.getFirstChild();node!=null;node=node.getNextSibling()){
//Node childformData=childformDatas.item(k);
if(node.getNodeType()==node.ELEMENT_NODE){
log.info("节点类型"+node.getNodeType());
node.getNodeValue();
log.info(node.getNodeName()+"="+node.getNodeValue());
}
}

}
///NodeList nodes=root.getChildNodes();
/*for(int i=0;i<nodes.getLength();i++){
Node node=nodes.item(i);
Element element=(Element)node;
// NodeList formDatas=element.getElementsByTagName(formData);
NodeList childnodes=node.getChildNodes();
///formdata元素
for(int j=0;j<childnodes.getLength();j++){
Element childNode=(Element)childnodes.item(i);
//childNode.g
}
}*/
return null;
}}
///
<form>
<formData>
<name>收文呈批表</name>
<desc>平台收文呈批表</desc>
<author></author>
<buildTime>1169127221000</buildTime>
<modifier>超级管理员(admin)</modifier>
<modiTime>1191846456000</modiTime>
<defaultShow>0</defaultShow>
<fm1></fm1>
<fm2></fm2>
<fm3></fm3>
<right>1</right>
</formData>

解决方案 »

  1.   

    是为”“还是为null,先看看对象存在不?debug一下
      

  2.   

    楼主麻烦你下次贴代码用上标签,会有高亮显示,另外贴关键部分就可以了,呵呵!
    其实看这几行就够了    private List read(org.w3c.dom.Document doc,Logger log){ 
            Element root=doc.getDocumentElement(); 
            NodeList formDatas=root.getElementsByTagName(formData); 
            for(int i=0;i <formDatas.getLength();i++){ 
                Node formData=formDatas.item(i); 
                formData.getNodeType(); 
                for(Node node=formData.getFirstChild();node!=null;node=node.getNextSibling())
                    if(node.getNodeType()==node.ELEMENT_NODE)
                        node.getNodeValue(); 
            }        

    几点错误,你的getElementByTageName("formData") 应该是传字符串进去返回一个NodeList,
    root就是根元素formData了然后要获得它之下名字为formData的元素,只会一个都没有所以for循环不会走的,你应该直接得到root的childNodes,然后遍历,顺便注意一下就连换行也会计算为一个元素