Java SAX解析器-解析int时NumberFormatException

问题描述 投票:0回答:1

我试图通过SAX Parser解析XML,看起来像这样:

<fil:films xmlns:fil="http://filmrenting.nure.ua/films/" xmlns:film="http://filmrenting.nure.ua/entity/film/">
  <!--Zero or more repetitions:-->
  <film:film id="3">
    <film:name>Matrix</film:name>
    <film:year>1999</film:year>
    <film:genre>SciFi</film:genre>
    <film:duration>PT110M</film:duration>
    <film:ageRating>NC-17</film:ageRating>
    <film:mediaCarrier>DVD</film:mediaCarrier>
    <film:description>Movie with Keanu Reeves!</film:description>
    <film:price>120.5</film:price>
  </film:film>
  <film:film id="5">
    <film:name>Dark Knight</film:name>
    <film:year>2008</film:year>
    <film:genre>Horror</film:genre>
    <film:duration>PT127M</film:duration>
    <film:ageRating>R</film:ageRating>
    <film:mediaCarrier>BD</film:mediaCarrier>
    <film:description>A movie about Batman, directed by Christopher Nolan!</film:description>
    <film:price>160.99</film:price>
  </film:film>
</fil:films>

下面显示了一个SAX解析器:

    @Override
    public void characters(char[] ch, int start, int length) throws SAXException {

        ...
        if (Const.TAG_YEAR.equals(current)) {
            try {
                film.setYear(Integer.parseInt(new String(ch, start, length)));
            }
            catch(NumberFormatException e) {
                e.printStackTrace();
            }
        }
        ...
}

我收到此错误:

java.lang.NumberFormatException: For input string: "
    "
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:569)
    at java.lang.Integer.parseInt(Integer.java:615)
    at ua.kiu.si.film.parser.SAXParser.characters(SAXParser.java:79)
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.characters(AbstractSAXParser.java:546)
    ... (other errors)

该字段中没有换行符号,但仍指向它。它成功输出了第一个名称(矩阵),但随后因该错误而卡住。但是,DOM解析器可以很好地解析XML。

如何解决?

java xml parsing sax
1个回答
0
投票

SAX解析器被允许在任意位置拆分文本节点,并在character()接口的多个连续调用中报告内容。您的代码假设该值不会以这种方式拆分。

© www.soinside.com 2019 - 2024. All rights reserved.