2013-07-17 5 views
0

Разбор XML с именами файлов с экранированными символами. Это имя файла на сервере:
счета-V% 29% 27% 22% 3B% 3A% 3E.layoutФункция XSLT document() с экранированными символами в имени файла

Когда я применяю функцию документа, он автоматически трансформирующие сбежавшие символов.

`<xsl:apply-templates select="document('Account-V%29%27%22%3B%3A%3E.layout')/Layout"/> 

выше дает ошибку, поскольку он не может найти этот файл на сервере:
счета-V) ' ";:.> Макет

Есть ли способ сказать, документ() функция не превратить уцелевших символов в файле? Я попытался оборачивая вокруг переменных, но это не сработало.

ответ

0

Если вы используете XSLT 2.0, попробуйте использовать encode-for-uri()

select="document(encode-for-uri('Account-V%29%27%22%3B%3A%3E.layout'))/Layout" 
+0

Кинжал, это XSLT 1.0. Любые идеи/обходные пути для 1.0? – user2593166

0

Способ, которым URI, который вы передаете функции document(), разыменовывается, во многом определяется реализацией, и многие XSLT-процессоры дают вам некоторый контроль над ним, например, позволяя вам предоставлять пользовательский URIResolver ,

Поэтому я не думаю, что на вопрос можно ответить, не зная вашего XSLT-процессора.

+0

Привет, Майкл, это Apache Xalan, работающий на tomcat. ОС, развивающаяся в Windows, будет работать на Linux в производстве. Спасибо за любую помощь. – user2593166

+0

Обнаружено обходное решение, которое работает. Не самый красивый, но перед выполнением XSLT выполните строку в Java, чтобы заменить такие, как 'fileNames.replace («% »,«% 25 »). Это заставляет функцию document() вывести знак процента на процент, который генерирует правильное имя файла на сервере. Таким образом,% 252E становится% 2E после функции документа. Собираетесь оставить без ответа в течение дня или двух, чтобы увидеть, есть ли у кого-то лучшее. – user2593166

0

Обнаружено обходное решение, которое работает. Не самый красивый, но перед выполнением XSLT выполните строку в Java, чтобы заменить такие, как fileNames.replace («%», «% 25»). Это заставляет функцию document() вызывать знак процента до процента, который генерирует правильное имя файла на сервере.

Смежные вопросы