#xslt #azure-functions
#xslt #azure-функции
Вопрос:
Я унаследовал поддержку процесса, который преобразует некоторый XML с использованием xslt. Я пытался найти способ локальной отладки, но, похоже, я зациклился на некоторых пользовательских функциях, источник которых я не могу найти.
Пространства имен в xsl определены следующим образом:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:user="urn:transformFunctions">
Далее в xsl ссылки на функции из этого пространства имен выполняются следующим образом:
<xsl:value-of select="user:PadString(TransactionHeader/SalesId,20,'padRight')"
При попытке локальной отладки я не получаю ничего, кроме пустого вывода. Если я удалю вызовы функций и просто выберу TransactionHeader / SalesID, я получу данные, как и ожидалось. Процесс работает нормально, как и при запуске в производство, поэтому я знаю, что функции работают.
Я очень новичок в использовании xslt, поэтому, пожалуйста, извините, если это основной вопрос. Функции нигде не определены в самом xsl, так где же они определены, чтобы я мог использовать их при локальной отладке?
Комментарии:
1. Итак, какой процессор XSLT вы используете, как вы его запускаете? Если функции не определены в XSLT, то ответ заключается в том, что функции, вероятно, настроены как функции расширения с помощью API процессора, и XSLT не является частью, подлежащей изменению или проверке, это код, выполняющий преобразование.
2. Во время моего локального тестирования я просто использую браузер Chrome для тестирования. Насколько я понял, пока xml имеет ссылку на xsl, все современные браузеры должны применять преобразования. В производственной среде он выполняется в функции Azure, но, опять же, нигде больше в этих функциях не определены пользовательские функции пользователя (которые я вижу)
3. «Современные» браузеры, как правило, поддерживают версию 1.0 XSLT от 1999 года, которая поддерживает только специфические для процессора XSLT способы определения функций расширения. Использование
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
предлагает использовать MSXML с JScript или VBScript или, возможно, для .NET с C # или JScript. Но браузеры не поддерживают это, кроме IE.4. Azure, вероятно, позволяет настраивать объекты расширения и функции с помощью XslCompiledTransform API или предоставляет некоторые предопределенные функции, настроенные таким образом.
5. Так что с . ЧИСТЫЙ код learn.microsoft.com/en-us/dotnet/standard/data/xml /… является соответствующим разделом для настройки .NET-кода, который будет вызываться из XSLT, запускаемого с помощью XslCompiledTransform.
Ответ №1:
Мартин был полностью прав здесь. В моем случае была функция Azure, обрабатывающая обработку xml. Чего я изначально не заметил, так это того, что он вызывал вторую функцию, в которой происходил тяжелый подъем
XslCompiledTransform processor = new XslCompiledTransform();
StringReader styleSheetReader = new StringReader(xsltStr);
processor.Load(new XmlTextReader(styleSheetReader), new XsltSettings(), new XmlUrlResolver());
XsltArgumentList argsList = new XsltArgumentList();
StringReader sr = new StringReader(inputXML);
XmlReaderSettings settings = new XmlReaderSettings();
XmlReader xmlReader = XmlReader.Create(sr, settings);
var flatFile= "";
argsList.AddExtensionObject("urn:transformFunctions", new XsltFunctions());