【问题标题】:Cannot cast xmlReader to Parser无法将 xmlReader 强制转换为 Parser
【发布时间】:2018-05-12 21:37:49
【问题描述】:

我正在尝试按照关于 Maven 项目的 this 教程使用 SAX 解析 XML 文件。这是我的SAXLocalNameCount

 public class SAXLocalNameCount extends DefaultHandler {
        private static String filename = ".\\file.xml";

    public static void main(String[] args) throws ParserConfigurationException, org.xml.sax.SAXException, IOException, SAXException {

    SAXParserFactory spfactory = SAXParserFactory.newInstance();
        spfactory.setNamespaceAware(true);
        SAXParser saxParser = spfactory.newSAXParser();
        XMLReader xmlReader = saxParser.getXMLReader();
        xmlReader.setContentHandler(new SAXLocalNameCount());
        xmlReader.parse(convertToFileURL());

    }

    private static void usage() {
        System.err.println("Usage: SAXLocalNameCount <file.xml>");
        System.err.println(" -usage or -help = this message");
        System.exit(1);
    }
    private Hashtable tags;

    public void startDocument() throws SAXException {
        tags = new Hashtable();
    }

    public void startElement(String namespaceURI,
                             String localName,
                             String qName,
                             Attributes atts)
            throws SAXException {

        String key = localName;
        Object value = tags.get(key);

        if (value == null) {
            tags.put(key, new Integer(1));
        }
        else {
            int count = ((Integer)value).intValue();
            count++;
            tags.put(key, new Integer(count));
        }
    }

    public void endDocument() throws SAXException {
        Enumeration e = tags.keys();
        while (e.hasMoreElements()) {
            String tag = (String) e.nextElement();
            int count = (Integer) tags.get(tag);
            System.out.println("Local Name \"" + tag + "\" occurs "
                    + count + " times");
        }
    }
    private static String convertToFileURL() {
        String path = new File(filename).getAbsolutePath();
        if (File.separatorChar != '/') {
            path = path.replace(File.separatorChar, '/');
        }

        if (!path.startsWith("/")) {
            path = "/" + path;
        }
        return "file:" + path;
    }

}

这一行:

XMLReader xmlReader = saxParser.getXMLReader();

给我错误:

ClassCastException: org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser 无法转换为 jdk.internal.org.xml.sax.XMLReader

我在这里错过了什么?

【问题讨论】:

  • 你提到的那行代码没有出现在你提到的教程中。不清楚为什么你认为这应该工作。你不能随手编造。
  • @EJP 难怪我投了反对票。谢谢,我已经正确编辑了。

标签: java xml casting compiler-errors sax


【解决方案1】:

我的问题是我从 jdk.internal.org.xml.sax.helpers.DefaultHandler 导入,而正确的导入应该是 org.xml.sax.helpers。默认处理程序

【讨论】:

    猜你喜欢
    • 2018-09-05
    • 2023-03-17
    • 2013-03-07
    • 2015-06-16
    • 2021-06-09
    • 2017-04-28
    • 1970-01-01
    • 2022-07-15
    • 1970-01-01
    相关资源
    最近更新 更多