Velocity XmlTool 3.0 с несколькими пространствами имен

Я пытаюсь обновить старый код с Velocity 1.7 / VelocityTools 2.0 до версий 2.2/3.0. Во время тестов я обрабатываю XML-файл с несколькими пространствами имен (скажем, b для книги и a для автора:<b:book xmlns:b="http://www.test.com/book" xmlns:a="http://www.test.com/author" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">). XML создается из класса JAXB. Раньше я мог просто адресовать это как:

$book=$xmlTool.parse($xmlText).get("b:book") 
$authorName=$book.find("./b:author/a:name")

С новыми версиями вроде не работает. Возвращаемое значение из get(...) всегда равно нулю. Кажется, что в XPath отсутствует NamespaceContext из проанализированного файла. Если я изменяю выражение XPath в find для поиска, например, по локальному имени, или если я "вставляю" (заменяя некоторый код в VelocityTools) пространство имен, оно работает. Он также работает со старой комбинацией Dom4j/jaxen в VelocityTools 2.0.

Изменить выражения XPath будет очень сложно (очень много шаблонов с разными пространствами имен и вариантами использования). Так что я мог бы остаться с VelocityTools 2.0, но из-за некоторых старых библиотек, которые могут не работать с будущими версиями программного обеспечения.

Есть ли способ указать XmlTool внедрить пространство имен из корневого узла? Есть запись об ошибке: https://issues.apache.org/jira/browse/VELTOOLS-160 Это было закрыто за ненадобностью, но я не вижу, как это должно работать.

0 ответов

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