问答详情
源自:2-2 使用 DOM 解析 XML 文件的属性名和属性值

代码运行出现问题

package com.imooc.domtest;

import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

/*
 * 应用DOM方式解析books.xml文件
 */
public class Domtest {

 public static void main(String[] args) {
  // TODO Auto-generated method stub
        //创建一个DocumentBuilderFactory对象
  DocumentBuilderFactory dbf= DocumentBuilderFactory.newInstance();//新的 DocumentBuilder 实例
  try {
   //创建DocumentBuilder对象
   DocumentBuilder db=dbf.newDocumentBuilder();
   //通过DocumentBuilder对象的parse方法加载Books.xml文件到当前项目下
      Document document= db.parse("books.xml");
      //获取所有book 节点
     NodeList booklist= document.getElementsByTagName("book");
     System.out.println("一共有"+booklist.getLength()+"本书");
     //遍历每个book节点
     //for(int i=0;i<booklist.getLength();i++){
      
  } catch (ParserConfigurationException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  catch (SAXException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }  

}
xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
       <book   id="1">
                <name>老人与海</name>
                <author>海明威</author>
                <year>2015</year>      
                <price>67</price>
       </book>
       
       <book   id="2">
                <name>看见</name>
                <language>chinese</language>
                <author>柴静</author>
                <year>2014</year>      
                <price>87</price>
       </book>          

</bookstore>

错误:

[Fatal Error] books.xml:2:6: 不允许有匹配 "[xX][mM][lL]" 的处理指令目标。
org.xml.sax.SAXParseException; systemId: file:///E:/Users/kexin/workspace/DomTest/books.xml; lineNumber: 2; columnNumber: 6; 不允许有匹配 "[xX][mM][lL]" 的处理指令目标。
 at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:257)
 at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:339)
 at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:177)
 at com.imooc.domtest.Domtest.main(Domtest.java:26)

提问者:慕粉3170877 2016-07-26 21:18

个回答

  • 慕粉3170877
    2016-07-27 14:42:04

    不过我发现如果我把 Document document= db.parse("books.xml");文件的路径改成Document document= db.parse("f:\\books.xml");运行就正确了。同时要注意xml文件保存时要以UTF-8编码保存。