Самый безболезненный способ добавить XPath 3.0 в кодовую базу, используя dom4j

Насколько я понимаю, SAXON - единственная библиотека, которая поддерживает XPath 3.0 в Java. Его реализация JAXP поддерживает только XPath 2.0. Его реализация XPath 3.0 должна называться так и требует, чтобы я сначала строил документ с использованием собственного API, а не с помощью JAXP-совместимого API, такого как DOM4J.

Это боль, потому что я старался абстрагировать все, что использует XPath, в интерфейс прокси-сервера, принимая в качестве параметров узел JAXP и строку xpath, но это кажется бессмысленным, если мне придется все реорганизовать, чтобы использовать узлы SAXON сверху вниз.

Я что-то неправильно понимаю? Есть ли менее болезненный способ?

1 ответ

Решение

Я все чаще пытаюсь убедить пользователей использовать API-интерфейс s9api вместо JAXP для обработки XPath. Причин тому множество: интерфейс JAXP обеспечивает лишь очень нерешительную поддержку моделей дерева, отличных от DOM; он действительно борется с системой расширенных типов XPath 2.0 и теперь 3.0, а в случае с Saxon он совсем не взаимодействует с другими технологиями XML и API.

Тем не менее, Saxon продолжает поддерживать JAXP XPath API со всеми его ограничениями как в отношении своей собственной модели дерева, так и в отношении сторонних моделей дерева, таких как DOM4J.

Одна вещь, которую мы отбросили, - это поддержка интерфейса служб XPath, в результате чего приложение, использующее метод XPathFactory.newInstance(), заберет Saxon, если оно находится на пути к классам. Причина этого заключается в том, что вам действительно нужно знать, когда вы пишете приложение, хотите ли вы процессор XPath 1.0 или 2.0, а механизм JAXP не дает вам возможности сказать, что вы хотите, или узнать, что вам дали. В результате многие приложения сталкивались с трудностями при диагностике при развертывании с неверным путем к классам. Если вы хотите, чтобы Saxon был вашим провайдером JAXP XPath, вам нужно явно запросить его.

Было бы полезно, если бы вы могли быть более конкретными о том, что вы пытаетесь сделать, и как это терпит неудачу.

Другие вопросы по тегам