【问题标题】:SAX parser load the DTD fileSAX 解析器加载 DTD 文件
【发布时间】:2016-07-27 08:05:16
【问题描述】:

我之前用过DOM解析器,把DTD文件放在项目下,DOM代码可以检测到DTD文件本身,根据规则解析文件。 当我转移到 SAX 解析器时,似乎 SAX 解析器在没有设置的情况下无法检测到 DTD 文件本身。有一些帖子提到使用resolveEntity(),虽然我不是很理解。谁能帮我解决这个问题,以一种简单的方式(在没有 CMD 的 eclipse 中)将本地 DTD 文件加载到我的 java 代码中?

如果有人能给出代码示例,那就最好了。

【问题讨论】:

    标签: java parsing xml-parsing sax


    【解决方案1】:

    我发布了一个可行的解决方案,并且我从 SAX 文档中获取了输入。我已经将 W3 Schools 的示例 DTD 和 XML 用于相同 (http://www.w3schools.com/xml/xml_dtd.asp) ,如果 DOCTYPE 在单独的文件中则不需要,因此从 DTD 中删除了这一行。不确定它是否是您想要的样本,希望对您有所帮助!

    public static void main(String[] args) {
            try {
                SAXParserFactory factory = SAXParserFactory.newInstance();
                factory.setNamespaceAware(true);
                factory.setValidating(true);
    
                XMLReader reader = factory.newSAXParser().getXMLReader();
                reader.parse(new InputSource(new FileInputStream("C:\\DevelopmentTools\\3.CODE\\SAX-XML.txt")));
                reader.setEntityResolver(new EntityResolver() {
    
                    @Override
                    public InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException {
                        // TODO Auto-generated method stub
                        if (systemId == null) {
                            systemId = "C:\\DevelopmentTools\\3.CODE\\99.WORKSPACE\\Note.dtd";
                        }
                        InputSource result = null;
                        result = new InputSource(systemId);
                        return result;
                    }
                });
    
            } catch (ParserConfigurationException e) {
                e.printStackTrace();
            } catch (SAXException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
    
        }
    

    【讨论】:

      猜你喜欢
      • 2023-03-13
      • 2017-08-19
      • 1970-01-01
      • 2011-01-25
      • 1970-01-01
      • 1970-01-01
      • 2011-09-21
      • 1970-01-01
      • 2012-03-14
      相关资源
      最近更新 更多