是错误的,parser.parse(textXml);传递是文件名字,而不是一个符合xml的String对象
应该是parser.parse(new InputSource(new StringReader(testxml));

解决方案 »

  1.   

    我按照你方法做提示“不能解析StringReader,或者它不是一种类型”是怎么回事呢?
    parser.parse(new InputSource(new StringReader(testxml)));
      

  2.   

    传递一个文件对象(File)就行了.DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    dbf.setValidating(true);     
    DocumentBuilder db = dbf.newDocumentBuilder();
    db.setErrorHandler(errorhandler);
    doc = db.parse(file);
    doc.normalize();
      

  3.   

    为何我用System.out.println(nodetagName.getNodeValue());打印值是空的?怎样取出textXml字符串中的值呢?
    String textXml = null;
    textXml = "<note>";
    textXml = textXml + "<to>aaa</to><from>bbb</from><heading>ccc</heading><body>ddd</body>";
    textXml = textXml + "</note>";
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder parser = factory.newDocumentBuilder();
    Document doc = parser.parse(new InputSource(new  java.io.StringReader(textXml)));
    NodeList names = doc.getElementsByTagName("note");
    Node nodetagName = null;
    for(int k=0;k<names.getLength();k++)
    {
    nodetagName = names.item(k);
    System.out.println(nodetagName.getNodeValue());
    }
      

  4.   

    parser.parse(new org.xml.sax.InputSource(new java.io.StringReader(testxml)));
      

  5.   

    nodeValue对于一个Element来说是空的,如果你需要取得如to的值代码应该是:
    Element toElement = (Element)doc.getElementsByTagName("to").item(0);
    System.out.println(toElement.getFirstChild().getNodeValue());
    //本来应当加入判断是否null的
      

  6.   

    谢谢ChDw(米) ,成功了!多谢了!
      

  7.   

    这么多人,你分数够吗?不过我不是来抢分的。呵呵
    稍微学一下DOM SAX
    其实java 开发使用JDOM比较好,况且很容易。像你的code:
    String textXml = null;
    textXml = "<note>";
    textXml = textXml + "<to>aaa</to><from>bbb</from><heading>ccc</heading><body>ddd</body>";
    textXml = textXml + "</note>";
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder parser = factory.newDocumentBuilder();
    Document doc = parser.parse(textXml);
    NodeList names = doc.getElementsByTagName("note");
    System.out.println(names.item(1));
    System.out.println(names.item(2));
    System.out.println(names.item(3));
    可以使用JDOM来做 简单多了,还有数据检查,强大易用。
     public jdom_test() {
        String textXml = null;
        textXml = "<note>";
        textXml = textXml +
            "<to>aaa</to><from>bbb</from><heading>ccc</heading><body>ddd</body>";
        textXml = textXml + "</note>";
        SAXBuilder builder = new SAXBuilder();
        Document doc = null;
        Reader in= new StringReader(textXml);
        try {
          doc = builder.build(in);
          Element root = doc.getRootElement();
          List ls = root.getChildren();
          for (Iterator iter = ls.iterator(); iter.hasNext(); ) {
            Element el = (Element) iter.next();
            if(el.getName().equals("to")){
             System.out.println(el.getText());
            }
          }
        }
        catch (IOException ex) {
          ex.printStackTrace();
        }
        catch (JDOMException ex) {
          ex.printStackTrace();
        }
      }