سؤال

كنت أتساءل كيف يمكنني تمديد 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. لذلك في الأساس ، تُركت مع ثلاثة خيارات:

  1. حاول إقناعك بقسمك بأنهم يجب أن يقدموا الدعم لمعالج XSLT آخر مثل saxon.net.
  2. إعادة تنفيذ جميع الوظائف التي تحتاجها باستخدام وظيفة MCXSSL من Microsoft. يجب أن يكون هذا صعبًا ويتركك مع تبعية مع Microsoft Parser. علاوة على ذلك ، فإنها تتحدث فقط عن وظائف XPath - لا يتم النظر في وظيفة XSLT 2.0 هنا.
  3. إعادة تنفيذ أوراق الأنماط الخاصة بك باستخدام XSLT 1.0.

أنا شخصياً أعتقد أن خيار Ony 1 و 3 ممكنان.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top