【问题标题】:Sax Parser: processingInstruction() not calledSax Parser:未调用 processingInstruction()
【发布时间】:2010-07-20 09:30:01
【问题描述】:

也许这是一个 n00b 问题。

我尝试解析这样的 xml 文件:

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

使用以下代码:

public static void parse(File f) {
    final DefaultHandler handler = new DefaultHandler() {
        @Override
        public void processingInstruction(String target, String data) throws SAXException {
            System.out.println("Processing Instruction");
        }
    };
    SAXParserFactory.newInstance().newSAXParser().parse(f, handler);
}

我希望输出"Processing Instruction" 打印在标准输出上。但这不会发生。谁能告诉我为什么?

【问题讨论】:

    标签: java xml sax saxparser


    【解决方案1】:

    来自 JavaDoc:

    SAX 解析器绝不能使用此方法报告 XML 声明(XML 1.0,第 2.8 节)或文本声明(XML 1.0,第 4.3.1 节)。

    据我了解,此方法不会报告/捕获&lt;?xml version="1.0" encoding="UTF-8" ?&gt; 行。尝试在 xml 代码中添加另一个处理指令并再次将其提供给解析器。

    【讨论】:

    • 感谢您的回答。那么另一个问题:是否有可能找出文件中是否存在有效的xml声明?
    • @Martin:ISTR 如果声明无效,它会抛出异常。
    • 也就是说,一个xml声明不是一个处理指令,不能被解析器报告为一个。
    • @Vinko 不幸的是,如果声明丢失,它不会抛出异常......
    • @Martin:但如果它无效,不是吗?
    猜你喜欢
    • 1970-01-01
    • 2014-12-26
    • 2012-06-01
    • 1970-01-01
    • 2011-12-05
    • 2012-05-01
    • 2017-06-03
    • 1970-01-01
    • 2023-03-10
    相关资源
    最近更新 更多