2

我必须用 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>

我的假设是否正确,即状态模式适合这里?如果是这样,在这里实施它的最佳方法是什么?

4

2 回答 2

3

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

但是,很难拥有通用的“获取信息”方法,因为类型可能会有所不同;并且,整个方法可能不适合 SAX 类方法的主要优点,即随着解析的进行逐步执行操作的能力,而不是在解析过程中积累信息并且只在以后采取行动(这个优势在当您正在解析非常大的文档)。因此,我不会将其视为在 Java 中使用 SAX 的“规范”方式,而只是偶尔会派上用场的一种变体。

于 2009-05-24T23:14:27.033 回答
0

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

要收集信息,您可以将一个对象传递给状态类的每个方法,以便它们可以将信息放入其中。

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

于 2009-05-25T06:59:33.150 回答