xsl:استيراد و xsl:تدرج في صفحات لا تعمل على جوجل كروم

StackOverflow https://stackoverflow.com/questions/1620589

  •  06-07-2019
  •  | 
  •  

سؤال

أنا بناء موقع على شبكة الإنترنت التي تستخدم xsl الأنماط و أنا بناء مكتبة صغيرة من الوظائف المفيدة في util الأنماط الأخرى أوراق الاستيراد مع

<xsl:import href="util" />

في أعلى كل ورقة.هذا لا يعمل في جوجل كروم, كما أنه لا يدعم xsl:استيراد حتى الآن.يمكن للشخص يرجى الكتابة لي الأنماط التي لا يمكن تشغيلها على الملقم الذي سيتم قراءة xsl:استيراد خط استيراد ذات الصلة الأنماط قبل إرسالها إلى العميل ؟

هل كانت مفيدة؟

المحلول

كنت تفعل شيئا مثل التالية ، والتي سوف تجمع بين الأنماط serverside, قبل أن يحصل على كروم.الخطوة الأولى هي في xsl:import ليس هو نفسه كما استبدال جميع الأماكن مع الأنماط المستوردة.

  1. استبدال جميع xsl:import مع xsl:include (استيراد الأولوية لا ينطبق على xsl:include, لذا قد تحتاج إلى تغيير التعليمات البرمجية الخاصة بك واستخدام الأولويات بدلا من ذلك)
  2. استخدام من جانب الخادم الأنماط أدناه إلى دمجها في واحد قبل التقديم
  3. انتظر بضع أسابيع (يمكن أن تكون أشهر).لقد خلق إصلاح الكروم وأعمل حاليا مع فريق المطورين إلى تضمين الإصلاح في بناء.
<xsl:template match="node()">
    <xsl:copy>
       <xsl:copy-of select="@*"/>
       <xsl:apply-templates select="node()"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="xsl:include">
   <!-- you'll probably want to be a bit more restrictive here -->
   <xsl:copy-of select="document(@href)/xsl:stylesheet/*" />
</xsl:template>

تحديث: مجرد ملاحظة:كروم علة يظهر في سفاري أيضا.

نصائح أخرى

ويمكنك أن تفعل ذلك في بيثون مع وحدات libxml2 وlibxslt ... لا تفعل كل ما تبذلونه من العمل بالنسبة لك، ولكن بدءا من شيء من هذا القبيل:

import libxml2, libxslt

styledoc = libxml2.parseFile("page.xsl")
style = libxslt.parseStylesheetDoc(styledoc)
doc = libxml2.parseFile("somefile.xml")
result = style.applyStylesheet(doc, None)

وبعد ذلك تكون مجرد شيء العودة.

وحاول شيئا من هذا القبيل في بي:

<?php
$sXml  = "<xml>";
$sXml .= "<testtag>hello tester</testtag>";
$sXml .= "</xml>";

# LOAD XML FILE
$XML = new DOMDocument();
$XML->loadXML( $sXml );

# START XSLT
$xslt = new XSLTProcessor();
$XSL = new DOMDocument();
$XSL->load( 'xsl/index.xsl', LIBXML_NOCDATA);
$xslt->importStylesheet( $XSL );
#PRINT
print $xslt->transformToXML( $XML );
?>

http://www.w3.org/TR/xslt#literal -result عنصر يبين كيفية حل القضية مكررة-XSL-مساحة الاسم عند كتابة أنماط XSL الذي يحول الخاص بك أنماط XSL الحالية إلى أنماط XSL مع <xsl:import>s الموسعة.

كن حذرا، على الرغم من حول الفرق بين <xsl:import> و<xsl:include>.

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