2012-08-02 33 views
0

我们正在尝试使用SAX解析器解析XML文件,但我们在使用开关面临的一个问题:萨克斯XML解析器,开关不采取串

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对象。

问题是,当解析器遇到一个标签,我们忽略它抛出一个异常。

+0

您可以捕获该异常。 – Thilo 2012-08-02 02:17:42

+0

我们正在构建树的过程中,我们想要通过或忽略异常。 – 2012-08-02 02:55:54

回答

0

抛出异常是因为您自己的代码调用MyEnum.valueOf,而参数不保证是枚举常量的名称。

因为您想忽略异常,所以最好不要抛出异常。

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

再不会到switch语句在所有如果它是已知的未知值:这可以通过例如将下面的方法来MyEnum做

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

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