سؤال

أحاول استخدام VBScript لإجراء تحويل XSLT على كائن XML.
يتضمن ملف XSL الذي أقوم بترجمته ملف <xsl:import href="script.xsl"/> التوجيه.إذا استخدمت عنوان URL المطلق (http://localhost/mysite/script.xsl)، فهو يستورد ورقة الأنماط بشكل جيد؛ومع ذلك، إذا استخدمت المسار النسبي (script.xsl) تقارير "لم يتم العثور على مورد". أحتاج إلى أن أكون قادرًا على نقل هذا بين مجموعة من الآلات ، لذلك يجب أن أكون قادرًا على استخدام URI النسبي.أي اقتراحات؟

ملحوظات:

  • ملف VBScript موجود في http://localhost/myscript.asp
  • ملف XSL الأول موجود في http://localhost/mysite/styles.xsl
  • ملف XSL الثاني موجود في http://localhost/mysite/script.xsl
  • باستخدام المسار النسبي mysite/script.xsl أيضا لا يعمل

إضافة:

شكرا للجميع على إجاباتكم.كلما بحثت أكثر في الكود الذي يفعل هذا، كلما أصبح غريبًا. myscript.asp هو تجميع غير عادي إلى حد ما من التعليمات البرمجية.ما يحدث هو styles.xsl يتم تضمينه في إخراج HTML لـ myscript.asp كقطعة XML (<xml src=...>) ثم يتم تحميل هذه القطعة كورقة أنماط، باستخدام VBScript، من جانب العميل.يتم بعد ذلك استخدام ورقة الأنماط هذه لتحويل قطعة XML التي يتم استردادها عبر XMLHTTP.لذا فإن المشكلة تكمن في سياق styles.xsl هو HTML من جانب العميل وليس له علاقة بالمكان script.xsl يكون.

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

المحلول 6

المحاولة الأولى:

لقد حاولت تضمين script.xsl كقطعة XML أخرى وتغيير عبارة الاستيراد بكل طريقة يمكن أن أتخيلها ولكن دون جدوى.

حل نهائي:

نظرًا لأن عنوان url المطلق لتضمين script.xsl يعمل من البداية، كان الحل النهائي هو تحويل style.xsl إلى style.asp باستخدام نوع المستند الصحيح.في هذا الملف، تمكنت بعد ذلك من استرداد اسم الخادم والبروتوكول والمسار ورددها في المكان الصحيح في بيان الاستيراد باستخدام asp.وبعد ذلك، عندما تم تضمين هذا الملف في mysscript.asp، كان يحتوي على عنوان URL المطلق الصحيح للخادم.يعد هذا نوعًا من الاختراق ولكن الطريقة الوحيدة التي وجدتها لحل هذا الموقف المعقد إلى حد ما.

نصائح أخرى

الدليل الحالي لـ xsl:import وxsl:include والدالة document() هو الدليل الذي يحتوي على التحويل الذي يستخدمها.لذلك يجب أن يعمل توجيه xsl:import الذي قلت إنك تستخدمه.

الشيء الوحيد الذي يمكنني التفكير فيه قد يؤثر على هذا:إذا كنت تستخدم مسارًا نسبيًا، فسيتم قراءة الملف مباشرة من نظام الملفات، بينما إذا كنت تستخدم عنوان URI مطلقًا، فسيتم استرداده من خادم الويب.هل من الممكن أن يكون هناك بعض إعدادات الأمان التي تمنع البرامج النصية من قراءة الملفات الموجودة في هذا الدليل؟

@ جون أعتقد أنك قريب جدًا ...ولكن لا ينبغي أن يكون...

<xsl:import href="/mysite/script.xsl"/>

...مع شرطة مائلة أولية؟

سأتعامل مع هذا عن طريق الجري مراقب عملية Sysinternals.مع تشغيل هذه الأداة، يمكنك بالفعل رؤية الملفات التي يحاول البرنامج النصي فتحها، حتى لو لم تكن موجودة.

هل من الممكن أن يكون "الدليل الحالي" لأغراض المسار النسبي هو موقع صفحة ASP الخاصة بك، وليس ملف XSL الخاص بك؟بمعنى آخر، إذا لم تكن قد قمت بذلك بالفعل، فيمكنك تجربة ما يلي:

<xsl:import href="mysite/script.xsl"/>

غالبًا ما أواجه هذه المشكلة نظرًا لوجود محلل URI مخصص يتم استخدامه بواسطة مكتبة لا أستطيع رؤيتها (أو لا أعرف عنها لأنني لم أقرأ الوثائق ذات الصلة.) لا أستطيع تذكر ما إذا كانت هذه مواصفات أم لا ليس ولكن في عالم Saxon/java، يحصل محلل URI المخصص على أول حل عند محاولة حل URI لبيانات التضمين/الاستيراد بالإضافة إلى وظيفة document().إذا لم يتمكن من حل URI، فإن محلل URI الافتراضي يقوم بتجربته، والذي عادةً لا يفوته أبدًا عندما يكون URI مطلقًا.

لذلك، من المحتمل أن يكون هناك شيء ما في محرك ASP يستخدم محلل URI يستند إلى السياق استنادًا إلى سياق التطبيق.

أنت بحاجة إلى متغير يحدد جذر التطبيق أو جذر الويب عند تحميل ملفات JS أو الصورة أو CSS.

 <xsl:import href="{$approot}/somedir/script.xsl"/>

أو إذا كانت لديك القيمة في ملف XML،

 <xsl:import href="{/root/@approot}/somedir/script.xsl"/>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top