Java 使用SAX的状态模式
我必须用JavaSAX解析器解析一些xml。由于我很忙,我发现状态模式可以在这里使用 定义了清晰的状态和状态转换,类似于xml文档的结构 为了实现状态模式,我必须定义一个接口(或抽象类)。最明显的接口方法是:Java 使用SAX的状态模式,java,xml,sax,state-pattern,Java,Xml,Sax,State Pattern,我必须用JavaSAX解析器解析一些xml。由于我很忙,我发现状态模式可以在这里使用 定义了清晰的状态和状态转换,类似于xml文档的结构 为了实现状态模式,我必须定义一个接口(或抽象类)。最明显的接口方法是: public void startElement(String elementName); public void endElement(String elementName); 但我遇到的问题是如何返回信息。我需要一个结构中的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>
E
1.
E
2.
F
2.
我的假设正确吗,州模式适合这里?如果是这样,在这里实现它的最佳方式是什么?您的接口可以由实例“内部积累”特定所需信息的类来实现,并添加其他方法以使该信息可访问
然而,很难有通用的“获取信息”方法,因为类型可能会有所不同;而且,整个方法可能与类似SAX的方法的主要优点不太匹配,即在解析过程中以增量方式执行操作的能力,而不是在解析过程中积累信息,然后才执行操作(在解析非常大的文档时,这一优势可能非常关键)。所以,我不认为它是在Java中使用SAX的一种“规范”方式,就像一种偶尔会派上用场的变体一样。我认为状态模式正好适合这里。必须保留一些状态,才能知道您在文档中的位置 为了收集信息,您可以向stateclasses的每个方法传递一个对象,以便它们可以将信息放在其中
除非有其他我没有想到的问题,否则我认为这是最好的解决办法。你让我想到了。我可以将一个类传递给state类的每个方法,state类可以修改这个类。即使使用SAX的常规方法,您也必须保持一些状态。为什么不使用允许随机访问的API而不是状态模式呢?