Я работаю над проектом агрегации данных, в котором мне нужно преобразовать данные XML от различных поставщиков данных в общий формат, который требует, чтобы все значения URI в наборе данных были должным образом экранированы. Вот пример URI, который я получаю от поставщика данных. Он содержит зарезервированные символы ("[", "]") в своем компоненте пути:
http://ogimages.bl.uk/images/001/001ROY000018D03U00107000[SVC1].jpg
Мне нужна эта экранированная форма:
http://ogimages.bl.uk/images/001/001ROY000018D03U00107000%5BSVC1%5D.jpg
Я планировал использовать XSLT с функцией EXSLT encode-uri (http://www.exslt.org/str/functions/encode-uri/str.encode-uri.html) для экранирования URI во время преобразования. В настоящее время я использую его следующим образом:
xsl:value-of select="str:encode-uri(., true())"/>
, который экранирует полный URI и приводит к
http%3A%2F%2Fogimages.bl.uk%2Fimages%2F001%2F001ROY000018D03U00107000%5BSVC1%5D.jpg
Это не то, что мне нужно, потому что я хотел бы сохранить зарезервированные символы URI, если они находятся в нужном месте.
Если я использую функцию encode-uri следующим образом
xsl:value-of select="str:encode-uri(., false())"/>
скобки не экранированы, потому что функция encode-uri не экранирует зарезервированные символы при вызове с логическим флагом false.
Итак, я думаю, что мне нужно применить кодировку URI к отдельным компонентам пути URI. Существуют ли какие-либо функции для этого или мне нужно запустить разбор URI в XSL (T)?
Thx