java反序列化xml,为什么报错了?

wangcb80 2015-04-14 06:14:47
下面是在D盘下,People.xml文件:

<?xml version="1.0" encoding="ISO-8859-1"?>
<people>
<person>
<first>Dr. Bunsen</first>
<last>Honeydew</last>
</person>
<person>
<first>Gonzo</first>
<last>The Great</last>
</person>
<person>
<first>Phillip J.</first>
<last>Fry</last>
</person>
</people>


下面是java文件:

import java.util.ArrayList;
import nu.xom.Builder;
import nu.xom.Document;
import nu.xom.Elements;

public class People extends ArrayList<Person>{
public People(String fileName) throws Exception{
Document doc = new Builder().build(fileName);
Elements elements = doc.getRootElement().getChildElements();
for(int i = 0;i<elements.size();i++)
add(new Person(elements.get(i)));
}
public static void main(String[] args) throws Exception{
People p = new People("d:\\People.xml");
System.out.println(p);
}
}


运行环境是netbeans 8.0.2,错误如下所示:

Exception in thread "main" com.sun.org.apache.xerces.internal.util.URI$MalformedURIException: Opaque part contains invalid character: \
at com.sun.org.apache.xerces.internal.util.URI.initializePath(URI.java:1142)
at com.sun.org.apache.xerces.internal.util.URI.initialize(URI.java:702)
at com.sun.org.apache.xerces.internal.util.URI.<init>(URI.java:314)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.expandSystemId(XMLEntityManager.java:2037)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:612)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startEntity(XMLEntityManager.java:1300)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startDocumentEntity(XMLEntityManager.java:1252)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.setInputSource(XMLDocumentScannerImpl.java:257)
at com.sun.org.apache.xerces.internal.parsers.DTDConfiguration.parse(DTDConfiguration.java:508)
at com.sun.org.apache.xerces.internal.parsers.DTDConfiguration.parse(DTDConfiguration.java:590)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1213)
at nu.xom.Builder.build(Unknown Source)
at nu.xom.Builder.build(Unknown Source)
at xml.People.<init>(People.java:21)
at xml.People.main(People.java:27)
Java Result: 1


这是java编程思想第4版,587页的例子。
...全文
200 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangcb80 2015-04-14
  • 打赏
  • 举报
回复
我已知道答案是:是书上的Java原文件印错了。正确的如下:
public class People extends ArrayList<Person>{
    public People(File fileName) throws Exception{
        Document doc = new Builder().build(fileName);
        Elements elements = doc.getRootElement().getChildElements();
        for(int i = 0;i<elements.size();i++)
            add(new Person(elements.get(i)));
    }
    public static void main(String[] args) throws Exception{
        File file = new File("D:\\People.xml");
        People p = new People(file);
        System.out.println(p);
    }  
}

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧