Государственный шаблон с SAX - PullRequest
2 голосов
/ 24 мая 2009

Я должен проанализировать некоторые XML с парсером Java SAX. Поскольку я был занят, я увидел, что здесь можно использовать шаблон состояний.

Определены четкие состояния и переходы между состояниями, напоминающие структуру документа 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 ]

2 голосов
/ 25 мая 2009

Ваш интерфейс может быть реализован классами, чьи экземпляры "внутренне накапливают" конкретную требуемую информацию и добавляют другие методы, чтобы сделать эту информацию доступной.

Однако сложно иметь универсальные методы «получения информации», поскольку типы могут различаться; и весь этот подход может не соответствовать главному преимуществу SAX-подобных подходов, а именно способности выполнять действия постепенно по мере выполнения анализа, а не накапливать информацию во время анализа и действовать позже (это преимущество может иметь решающее значение в вы анализируете очень большие документы). Так что я бы не воспринял это как «канонический» способ использования SAX в Java, просто как один вариант, который может пригодиться время от времени.

0 голосов
/ 25 мая 2009

Я думаю, что государственная модель просто подходит здесь. Должно быть какое-то состояние, чтобы знать, где вы находитесь в документе.

Чтобы собрать информацию, вы можете передать объект каждому методу классов состояний, чтобы они могли поместить туда свою информацию.

Если нет другой проблемы, о которой я не задумывался, я думаю, что это лучшее решение.

...