代码之家  ›  专栏  ›  技术社区  ›  Ikke

使用sax的状态模式

  •  2
  • Ikke  · 技术社区  · 15 年前

    我必须用java sax解析器解析一些xml。当我很忙的时候,我发现状态模式可以在这里使用。

    定义了清晰的状态和状态转换,类似于xml文档的结构。

    为了实现状态模式,我必须定义一个接口(或抽象类)。最明显的接口方法是:

    public void startElement(String elementName);
    public void endElement(String elementName);
    

    但我遇到的问题是如何返回信息。我需要在一个结构中的XML文档中的多个级别的信息。

    这是XML文档的一部分

    <chessboard>
         <white>
             <king>
                  <position>
                      <x>e</x>
              <y>1</y>
                  </position>
             </king>
             <pawns>
                 <pawn id="1">
                      <position>
                          <x>e</x>
                  <y>2</y>
                      </position>
                 </pawn>
                 <pawn id="1">
                      <position>
                          <x>f</x>
                  <y>2</y>
                      </position>
                 </pawn>
             </pawns>
        </white>
    </chessboard>
    

    我的假设正确吗,州模式适合这里?如果是的话,在这里最好的方法是什么?

    2 回复  |  直到 9 年前
        1
  •  2
  •   Alex Martelli    15 年前

    接口可以由其实例“内部积累”特定所需信息的类实现,并添加其他方法以使该信息可访问。

    但是,由于类型不同,很难有通用的“获取信息”的方法;而且,整个方法可能不适合SAX类方法的主要优点,即随着分析的进行,增量地执行操作的能力,而不是在解析过程中积累信息,而只是在稍后进行操作(当解析非常大的文档时,这种优势可能是至关重要的)。所以,我不会把它当作一种“规范”的方式在爪哇使用SAX,就像一个偶尔会有用的变化。

        2
  •  0
  •   Ikke    15 年前

    我认为国家模式正好适合这里。要知道你在文件里的位置,必须有一个州的记录。

    为了收集信息,你可以把一个对象传递给每个状态的方法,这样他们就可以把信息放在那里。

    除非还有其他我没想到的问题,我认为这是最好的解决办法。

    推荐文章
    Praxder  ·  SAX XMLParser不工作
    12 年前