前几天在使用Dom4j开发项目时,遇到了两个问题,今天记在这里:
1、直接使用SAXReader.read(String url)方法指定文件所在路径,读取包含中文内容的文件时,发生了错误,提示信息为:
org.dom4j.DocumentException: invalid byte 1 of 1-byte UTF-8 sequence (0xb2) Nested exception: invalid byte 1 of 1-byte UTF-8 sequence (0xb2)。
具体原因是:Dom4j内部的方法在读取文件采用了默认的编码,和文件本身的编码不一致。
解决方法:使用SAXReader.read(Reader reader)方法代替前面的方法,先创建一个Reader实例:Reader reader = new InputStreamReader(new FileInputStream(path)),然后将这个reader作为参数传递给SAXReader.read方法。
2、使用doc.getSelectNodes(xpath)使用发生了错误,提示是:
java.lang.NoClassDefFoundError: org/jaxen/JaxenException
at org.dom4j.DocumentFactory.createXPath(DocumentFactory.java:230)
at org.dom4j.tree.AbstractNode.createXPath(AbstractNode.java:207)
at org.dom4j.tree.AbstractNode.selectNodes(AbstractNode.java:164)
at org.dom4j.DocumentFactory.createXPath(DocumentFactory.java:230)
at org.dom4j.tree.AbstractNode.createXPath(AbstractNode.java:207)
at org.dom4j.tree.AbstractNode.selectNodes(AbstractNode.java:164)
通过信息可以发现是忘记了增加jaxen包,重新下载dom4j-1.6.2.zip,在lib中目录中有jaxen-1.1-beta-6.jar,添加project的classpath就可以了。