SAX的状态模式

时间:2009-05-24 19:42:21

标签: java xml state sax

我必须使用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 个答案:

答案 0 :(得分:2)

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

但是,很难有通用的“获取信息”方法,因为类型可能会有所不同;并且,这整个方法可能不适合类似SAX的方法的主要优点,即在解析过程中逐步执行操作的能力,而不是在解析期间累积信息并且仅在稍后执行(此优势在以下情况下至关重要)你正在解析非常大的文件)。所以,我不会把它当作在Java中使用SAX的“规范”方式,就像一个可能偶尔会派上用场的变种一样。

答案 1 :(得分:0)

我认为状态模式恰好符合这里。必须保留一些状态,才能知道您在文档中的位置。

要收集信息,您可以将对象传递给状态类的每个方法,以便他们可以将信息放在那里。

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