XSLT 1.0 كيفية تمديد مع FN (مساحة اسم الوظيفة)
سؤال
كنت أتساءل كيف يمكنني تمديد XSLT 1.0 حتى أتمكن من استخدام وظائف من مساحة اسم وظيفة FN على http://www.w3schools.com/xpath/xpath_functions.asp
قيل لي فقط أن النظام يستخدم معالج MSXML XSLT من الآن فصاعدًا. تمت كتابة جميع أوراق الأنماط في 2.0 ... لذا الآن أنا مكدس ، لا شيء يعمل ولا أعرف كيف يمكنني استخدام وظائف على سبيل المثال من مساحة اسم FN.
كنت أتساءل عما إذا كان من الممكن تمديد XSLT 1.0 بطريقة أو بأخرى ، لأنني أستخدم الكثير من هذه الوظائف. أو ماذا أفعل الآن؟ أنا ضائع ومحبط تمامًا.
حقا نقدر اي مساعده!
شكرًا جزيلاً!
المحلول
إذا كنت عالقًا مع MSXML كمعالجك ، فأعتقد أنك الوحيد هو الذهاب مع الخيار 2 في إجابة Obalix ، ولكن من المحتمل أن تضطر إلى كتابة وظائف التمديد بنفسك.
فيما يلي مثال على كيفية القيام بوظيفة الحالة العليا. هذا يستخدم javaScript داخل XSLT للقيام بالوظيفة.
<?xml version='1.0'?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:user="http://mycompany.com/mynamespace">
<msxsl:script language="javascript" implements-prefix="user">
function uppercase(textToConvert)
{
return textToConvert.toUpperCase();
}
</msxsl:script>
<xsl:template match="text()">
<xsl:value-of select="user:uppercase(string(.))"/>
</xsl:template>
</xsl:stylesheet>
ما يمكنك القيام به ، هو وضع جميع وظائف البرنامج النصي في ورقة XSLT الخاصة بهم ، وإدراجها في جميع أوراق أنماط XSLT الخاصة بك.
ما مدى تعقيد هذا الأمر ، يعتمد على عدد وظائف XPath2.0 التي استخدمتها.
نصائح أخرى
حسنًا ، IMHO ، أنت عالق قليلاً. MSXML ، لا ينفذ XSLT 2.0 و XPATH 2.0. لذلك في الأساس ، تُركت مع ثلاثة خيارات:
- حاول إقناعك بقسمك بأنهم يجب أن يقدموا الدعم لمعالج XSLT آخر مثل saxon.net.
- إعادة تنفيذ جميع الوظائف التي تحتاجها باستخدام وظيفة MCXSSL من Microsoft. يجب أن يكون هذا صعبًا ويتركك مع تبعية مع Microsoft Parser. علاوة على ذلك ، فإنها تتحدث فقط عن وظائف XPath - لا يتم النظر في وظيفة XSLT 2.0 هنا.
- إعادة تنفيذ أوراق الأنماط الخاصة بك باستخدام XSLT 1.0.
أنا شخصياً أعتقد أن خيار Ony 1 و 3 ممكنان.