xml无法读取XMLFile,异常为:java。木卫一。FileNotFoundException:C:\Temp\logger。dtd(系统找不到指定的文件)
我在读取下面的类创建的XML文件时遇到问题。我相信这里有一些属性需要设置,以便使用正确的文件目录。使用以下命令生成的XMLfile:
<?xml version="1.0" encoding="WINDOWS-1252"?>
<!DOCTYPE log SYSTEM "logger.dtd">
如果删除包含“logger.dtd”的行,则可以读取顶部的。有人能解释一下发生了什么事吗?我正在读取使用SAXParser API设置的同一URI。我按照这里的SAX解析说明进行:http://www.mkyong.com/java/how-to-read-xml-file-in-java-sax-parser/
package logging;
import java.io.IOException;
import java.util.logging.FileHandler;
import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;
import java.util.logging.XMLFormatter;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class Log {
static private FileHandler fileTxt;
static private SimpleFormatter formatterTxt;
static private FileHandler fileXML;
static private XMLFormatter formatterXML;
static public void setup(Logger theLogger) throws IOException{
Logger logger = theLogger;
logger.setLevel(Level.ALL);
fileTxt = new FileHandler("C:\\Temp\\logging.txt");
fileXML = new FileHandler("C:\\Temp\\XMLLogging.xml");
formatterTxt = new SimpleFormatter();
fileTxt.setFormatter(formatterTxt);
logger.addHandler(fileTxt);
formatterXML = new XMLFormatter();
fileXML.setFormatter(formatterXML);
logger.addHandler(fileXML);
for(Handler h: logger.getHandlers()){
System.out.println(h.getFormatter());
}
}
}
# 1 楼答案
引发此错误是因为SAX解析器默认为验证和加载外部DTD。如果不希望这样做,请禁用验证:
SAX将不再查找DTD文件,也不会引发文件未找到异常
否则,“logger.dtd”文件可以在3.0附录A:XMLFormatter输出的dtd下的Java Logging Overview中找到
您只需复制文本并将其放入名为“logger.dtd”的文件中,然后将其放入与xml日志文件相同的目录中。然后SAX解析器将能够找到文件,因为它存在
您还可以通过搜索logging package summary找到指向此的链接
# 2 楼答案
虽然这是一个问题,但我遇到了这种情况,不得不努力寻找解决办法。我发现了这一点,如果它对其他人也有效的话
实现此方法并提及您的dtd名称,它应该毫无例外地继续进行