【问题标题】:Sax XML Parser, switch does not take a stringSax XML Parser,switch 不带字符串
【发布时间】:2012-08-02 02:13:32
【问题描述】:

我们正在尝试使用 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 对象。

问题是当解析器遇到我们忽略的标签时会抛出异常。

【问题讨论】:

  • 你可以捕捉到那个异常。
  • 我们正在构建树,我们想要传递或忽略异常。

标签: enums switch-statement saxparser


【解决方案1】:

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

因为您想忽略异常,所以最好不要抛出异常。例如,可以通过向 MyEnum 添加以下方法来完成:

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

如果已知是未知值,则根本不进入switch语句:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-23
    • 2014-12-26
    • 2011-11-03
    • 1970-01-01
    • 2010-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多