Самый быстрый способ (быстрая кодировка), чтобы выполнить это, заключается в том, чтобы написать часть внутреннего документа, которую вы хотите проанализировать с помощью SAX во внутреннюю строку, а затем с помощью StringReader
на основе этой строки передать это SAX, используя ваш обработчик.
Вам действительно нужно создавать события SAX на основе ваших данных и передавать эти события обработчику. Вы можете сделать это, получив данные в форме InputSource
или Reader
, а затем используя это в своем анализе, которое является тактикой, описанной выше, или вы можете просто имитировать события SAX, напрямую вызывая методы ContentHandler
, которые вы используете уже написано. Но называя их в правильном порядке и подавая им правильные данные для достижения того, что вам нужно, может быть болезненным, если ваш документ вообще сложный.
Если Dom4J предоставляет способ создания InputSource
на основе узла в структуре документа, это будет проще всего использовать и, вероятно, гораздо эффективнее, чем сначала записать его в строку.
Возможно, вам стоит рассмотреть возможность извлечения частей вашего ContentHandler
, которые выполняют фактическую работу в отдельный класс, который вы можете использовать как из ContentHandler
, так и из нового класса, который перемещается по внутреннему дереву.
Но это было бы очень медленно, нет? – Xaero182
Может быть медленным, в зависимости от того, сколько вы перефирируете. Но, учитывая, что вы уже разобрались, вы немного неэффективны решением о повторной обработке частей. –
Thats true. Я мог бы добавить несколько обработчиков и сделать больше вещей параллельно. Я думаю, что я собираюсь извлечь часть ContentHandler, выполняя эту работу, как вы предлагаете. Благодаря! – Xaero182