我必须使用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>
我的假设是正确的,状态模式适合这里吗?如果是这样,在这里实施它的最佳方式是什么?
答案 0 :(得分:2)
您的界面可以由其实例“内部累积”特定所需信息的类实现,并添加其他方法以使该信息可访问。
但是,很难有通用的“获取信息”方法,因为类型可能会有所不同;并且,这整个方法可能不适合类似SAX的方法的主要优点,即在解析过程中逐步执行操作的能力,而不是在解析期间累积信息并且仅在稍后执行(此优势在以下情况下至关重要)你正在解析非常大的文件)。所以,我不会把它当作在Java中使用SAX的“规范”方式,就像一个可能偶尔会派上用场的变种一样。
答案 1 :(得分:0)
我认为状态模式恰好符合这里。必须保留一些状态,才能知道您在文档中的位置。
要收集信息,您可以将对象传递给状态类的每个方法,以便他们可以将信息放在那里。
除非我还没有想到其他问题,否则我认为这是最好的解决方法。