Загрузка локальных фрагментов в DOM при синтаксическом анализе большого XML-файла в SAX (Java)

У меня есть XML-файл, который мне бы не пришлось загружать полностью в память. Как всем известно, для такого файла мне лучше использовать синтаксический анализатор SAX (который будет работать с файлом и вызывать события, если что-то релевантное будет найдено.)

Моя текущая проблема в том, что я хотел бы обработать файл " по куску ", что означает:

  1. Проанализируйте файл и найдите соответствующий тег (узел)
  2. Загрузите этот тег полностью в память (как мы сделали бы это в DOM)
  3. Выполните процесс этого объекта (этого локального кусок)
  4. Когда я закончу с фрагментом, отпустите введите его и перейдите к 1. (до "конца файла")

В идеальном мире я ищу что-то вроде этого:

// 1. Create a parser and set the file to load
      IdealParser p = new IdealParser("BigFile.xml");
// 2. Set an XPath to define the interesting nodes
      p.setRelevantNodesPath("/path/to/relevant/nodes");
// 3. Add a handler to callback the right method once a node is found
      p.setHandler(new Handler(){
// 4. The method callback by the parser when a relevant node is found
      void aNodeIsFound(saxNode aNode)
   {
   // 5. Inflate the current node i.e. load it (and all its content) in memory
         DomNode d = aNode.expand();
   // 6. Do something with the inflated node (method to be defined somewhere)
         doThingWithNode(d);
    }
   });
// 7. Start the parser
      p.start();

Я сейчас застрял на том, как развернуть a "саксофонный узел" (поймите меня ...) качественно.

Есть ли какая-либо инфраструктура или библиотека Java, имеющая отношение к такого рода задачам?

6
задан Community 23 May 2017 в 12:02
поделиться