Как изменить базовый URI XdmNode в S9API - PullRequest
0 голосов
/ 13 апреля 2020

У меня есть домашний кеш для экземпляров Saxon S9API XdmNode, реализующих операции get, put, move и remove по URI. Операция move позволяет перемещать XdmNode из одного URI в другой.

Моя проблема заключается в том, что XdmNode внутренне сохраняет базовый URI документа. Как обновить базовый URI подстилающего элемента NodeInfo? Когда нижележащим узлом является DOMNodeWrapper, базовый URI может быть обновлен. Но, например, TinyDocumentImpl является неизменным.

Существует ли решение, позволяющее обновить базовый URI TinyDocumentImpl, что не предполагает создание нового документа путем создания полной копии дерево?

1 Ответ

1 голос
/ 23 апреля 2020

Я пропустил этот вопрос, когда он впервые появился из-за отсутствия тега "saxon".

Один из вариантов - использовать LinkedTree в качестве выбранной вами модели дерева; связанные деревья являются изменяемыми, а класс DocumentImpl имеет метод setBaseURI(). Вы можете выбрать модель дерева, используя DocumentBuilder.setTreeModel(). (Но используйте это с осторожностью; если вы измените свойства узла в середине преобразования, последствия непредсказуемы.)

Другой вариант - заключить TreeInfo в net.sf.saxon.tree.wrapper.RebasedDocument, что создает виртуальная копия исходного узла, идентичная, за исключением наличия другого базового URI. Виртуальная копия имеет почти нулевую стоимость памяти, но при перемещении по дереву возникают небольшие накладные расходы.

...