Если вы хотите перевести анонимную функцию, например, созданную вами в качестве обработчика, я рекомендую следующее:
function()
{
if (!wait_condition)
{
setTimeout(arguments.callee, 100, /*comma-separated arguments here*/);
}
//rest of function
}
Этот код говорит: «Если условие ожидания еще не выполнено, вызовите эта функция снова с этими аргументами. " Я использовал этот метод для передачи одних и тех же аргументов моим обработчикам, что фактически делает этот код незапрашивающим sleep () (который работает только в начале вашей функции).
dom4j или jdom, вероятно, самые элегантные, вы можете писать код так, как вам нравится. У Dom4j есть компоновщики, если я помню, и да, код более подробный.
Element.addElement("x").setAttribute("x", "y").xxxxx;
StaxMate , хотя и не такой лаконичный, как компоновщики языков сценариев, делает вещи довольно простыми; обычно структурно так же просто, как древовидные модели, но дополнительно поддерживает типизированное сложение (неявные преобразования). И делает все это непосредственно в потоке, что означает очень низкое использование памяти (и высокую скорость, если это имеет значение).
Как бы то ни было, он также поддерживает свободный стиль (начиная с 2.0.x), поскольку это часто имеет смысл . Основное преимущество перед решениями с полной привязкой данных (и моделью дерева), вероятно, заключается в низком использовании памяти; очень мало данных о состоянии, все выходные данные отправляются по назначению как можно скорее.
Вы можете рассмотреть JIBX , вы можете определить отображение из классов модели предметной области в вашу целевую XML-схему.
В качестве альтернативы, если это невозможно, хотя я знаю, что вы заявляете, что вы отказались от использования технологий привязки, я рекомендую вам пересмотреть это решение, копирование из вашей модели предметной области в сгенерированную модель, скорее всего, сделает более чистым, более поддерживаемый и менее подверженный ошибкам код, чем то, что вы предлагаете (что также может делать JIBX).
Я, вероятно, должен добавить, по моему опыту задавать здесь вопросы о JIBX бесплодно, но их список рассылки очень полезен.
Почему бы вам в любом случае просто не использовать JAXB ... тогда проблема становится очень простой объект для сопоставления объектов, и вы вообще избегаете xml.
Take посмотрите XOM . Это быстро, просто, правильно и не многословно.