Я думаю Питер прибил вопрос ; Я просто строю поверх его ответа.
Эта строка в примере кода Томаса немного запутала:
authorizationRule.setAction( new AuthorizationRule() );
... если AuthorizationRule не является пользовательской реализацией Action , потому что это то, что принимает setAction.
В любом случае, со следующим кодом метод run действия действительно вызывается для каждых пяти элементов «authorize»:
Rule authorizationRule = new Rule();
authorizationRule.setPattern(DocumentHelper.createPattern("//authorize"));
final Stylesheet stylesheet = new Stylesheet();
authorizationRule.setAction(new Action(){
public void run(Node node) throws Exception {
stylesheet.applyTemplates(node);
}
});
stylesheet.addRule(authorizationRule);
stylesheet.run(document);
(Работает только после изменения фрагмента XML на правильно сформированный документ.)
То, как вам нужно использовать таблицу стилей внутри действия, кажется немного неловким, и я не уверен, как это можно сделать в dom4j. Жаль, что соответствующие классы, такие как Таблица стилей и Правило , кажутся довольно неадекватно документированными. (Рассмотрим, например, метод run(Node node, String mode)
, параметр режима которого, по-видимому, полностью не объясняется.)