Как создать обработчик для разбора XML с использованием SAX? - PullRequest
0 голосов
/ 28 ноября 2011

Я использую xerces SAX для разбора этого XML:

<product id="123">
  <sku>abc123</sku>
  <location>
    <warehouse>1</warehouse/>
    <level>3</level>
  </location>
  <details>
    <weight unit="kg">150</weight/>
    <mfg>honda</mfg>
  </details>
</product>

Итак, я создал свой собственный класс с именем ProductSAXHandler.java:

public class ProductSAXHandler extends DefaultHandler {


}

Теперь из моего весеннего контроллера mvc я планирую передать свой XML-файл в виде строки и хочу вернуть объект Product.

Итак, внутри моего ProductSAXHandler я создам методы startElement, endElement.

Итак, я должен просто создать метод, который принимает xml как строку, затем создает экземпляр этого ProductSAXhandler и затем вызывает parse?

Это мой первый раз, когда я имею дело с xml / sax, поэтому мне немного непонятно, как создать этот класс.

1 Ответ

1 голос
/ 28 ноября 2011

Это не дает прямого ответа на ваш вопрос, но я прочитаю немного между строк и сосредоточусь на вашем действительном намерении ...

Так как вам нужен экземпляр какого-то Product класса, которыйинкапсулирует данные из XML, вероятно, в структурированном виде по предпочтению, вы бы гораздо лучше использовали JAXB для этой задачи.Если у вас нет действительно особых требований к настройке привязки XML-ввода к объектам, это окажется намного проще, чем при использовании SAX.

Что вам нужно будет сделать:

  1. Получить W3C XML-схему для вашего XML.Если у вас его нет и вы не можете его получить, то существуют инструменты, которые могут генерировать схему на основе входного XML. Trang делает это очень простым.
  2. Генерация классов Java из схемы.Для этого вы можете использовать XJC (компилятор XML-Java), доступный в Sun JDK.Если вы используете инструменты сборки, такие как Ant или Maven, есть плагины.Это может автоматизировать процесс, чтобы сделать его частью полной сборки.
  3. Используйте API JAXB с вашими сгенерированными классами, чтобы легко превращать документы XML в объекты и наоборот.

ХотяJAXB потребуется некоторое время для изучения (особенно если желаемое отображение XML-Java не равно 1-к-1), я думаю, что в конечном итоге вы сэкономите время.

Извините, если вы действительноМне нужен SAX, и этот ответ не применим, но я решил, что лучше сообщу вам о ваших возможностях, прежде чем использовать несколько устаревшую модель обработки XML.Обратите внимание, что DOM и StAX также могут вас заинтересовать.

...