gpt4 book ai didi

java - 使用 DocumentBuilder 解析 XML 文件时出现“MalformedURLException”

转载 作者:行者123 更新时间:2023-11-29 03:09:03 31 4
gpt4 key购买 nike

我正在尝试使用“DocumentBuilder”解析 xml 文件并遇到以下错误。

java.net.MalformedURLException: no protocol: <http://java.sun.com/j2ee/dtds/application_1_2.dtd>

我的xml文件的第一部分是这样的(不能更改xml文件)

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE application PUBLIC '-//Sun Microsystems, Inc.//DTD J2EE Application 1.2//EN' '<http://java.sun.com/j2ee/dtds/application_1_2.dtd>'>
<application>
<display-name>Black hole</display-name>
<description>Black hole service framework</description>
<module>
<ejb>StructureService.jar</ejb>
</module>
<module>
<ejb>ResourceService.jar</ejb>
</module>
<module>
<ejb>DatumServiceInternal.jar</ejb>
</module>

在这里,我是如何尝试解析 XML 文件的

File xml = new File(path);

FileInputStream inputStream = new FileInputStream(xml);

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();

return db.parse(inputStream , "UTF-8");

我尝试用不同的方式来做,但我总是遇到上述错误。请帮我找出问题所在。

最佳答案

如果您不能更改 xml 中的 dtd url,请使用实体解析器,下面我修改了您之前的代码。

    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
EntityResolver er = new EntityResolver() {
@Override
public InputSource resolveEntity(String publicId, String systemId)
throws SAXException, IOException {
System.out.println(publicId);
System.out.println(systemId);
if (systemId.startsWith("<") && systemId.endsWith(">")) {
return new InputSource(systemId.substring(1,systemId.length()-1));
}
return null;
}
};
db.setEntityResolver(er);
db.parse(inputStream , "UTF-8");

关于java - 使用 DocumentBuilder 解析 XML 文件时出现“MalformedURLException”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30504979/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com