Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用SAX的状态模式_Java_Xml_Sax_State Pattern - Fatal编程技术网

Java 使用SAX的状态模式

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文档的一部分 <

我必须用JavaSAX解析器解析一些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而不是状态模式呢?