Sax XML Parser,开关不接受字符串



我们试图使用sax解析器解析xml文件,但在使用switch-in时遇到了问题:

 public void startElement(String uri, String localName, String qName,
    Attributes atts) throws SAXException {
    switch(MyEnum.valueOf(qNam))
     case tag1: 
          .......
                 break;
        case tag2:  
         ........
                 break;
        case tag5:  
         ..........

在每种情况下,我们都会填充一些pojo对象。

问题是,当解析器遇到我们忽略的标记时,它会引发异常。

由于您自己的代码调用MyEnum.valueOf的参数不能保证是枚举常量的名称,因此引发异常。

因为您想忽略Exception,所以最好不要抛出异常。例如,可以通过将以下方法添加到MyEnum来实现:

public static boolean isOneOfTheValues(String val) {
    for (MyEnum m: values()) {
        if (m.name().equals(val)) {
            return true;
        }
    }
    return false;
}

然后如果它是未知值,则根本不进入切换语句:

if (!MyEnum.isOneOfTheValues(s)) {
    return;
}
switch(MyEnum.valueOf(qNam))

如果枚举包含许多常量,则使用重建集而不是迭代values()的返回值可以提供更好的性能。

最新更新