我用netbeans操作xml,发现在doc里面查找element出现错误。程序应该没问题,所以怀疑是不是需要DTD文件啊?我现在是只有xml的文件,手写的。每次validate都是出现错误,说root 未声明。
所以 想请教 操作xml的时候必须要DTD嘛?还是在netbeans里面比较特殊?谢谢

解决方案 »

  1.   

      具体代码如下:String words= "";
            NodeList nodelist = doc.getElementsByTagName("Movements");
            NodeList children;
            if(nodelist.item(0)!= null){
               System.out.println(""+nodelist.getLength()); //打印正确
               System.out.println(""+nodelist.item(0));//打印正确
               System.out.println(nodelist.item(0).getNodeName());//打印正确
               if(nodelist.item(0).getLastChild()!=null)
                  System.out.println(nodelist.item(0).getLastChild().getNodeName().toString());//打印错误,出现#text
               children  = nodelist.item(0).getChildNodes();           
               System.out.println("x"+children.getLength());//打印错误
               System.out.println(children.item(0).getNodeName());//打印错误,出现#text
            }        
            else{
                System.out.println("Check your 'Position' tag in the XML!");
            }
            children = nodelist.item(0).getChildNodes();
            for(int i =0;i<nodelist.getLength();i++){
                 System.out.println( children.item(i).getNodeName());
                if(children.item(i).getChildNodes().item(0)!= null){                words = words.concat(children.item(i).getChildNodes().item(0).getTextContent());
                }
                else{
                    
                    System.out.println("Check your 'Position' tag in the XML!");
                }
            }
            return words;
        }
      

  2.   

    先说一下,操作XML 的时候和你有没有DTD没有什么关系!
    DTD只是约束XML的 与java 没有多大关系!另外 ,
    if(nodelist.item(0).getLastChild()!=null) //这里判断child存在么?
                  System.out.println(nodelist.item(0).getLastChild().getNodeName().toString());//打印错误,出现#text   // getNodeName() 得到了name 为什么还要 toString()有什么意义么?
    最后,root没有声明!这个错误我没有见过~ 不过你可以试试这段代码,也许有用!
    <!DOCTYPE 根节点名>
      

  3.   

    谢谢大家!
    问题最终被我发现了:打印的错误在于,在xml中即使是回车或空格也算一个子节点,所以我本来认为的第一个节点其实是回车,于是出现了意想不到的打印结果。