سؤال

ضمن مستند XSLT، هل من الممكن تكرار مجموعة من الملفات في الدليل الحالي؟

لدي موقف حيث لدي دليل مليء بملفات XML التي تحتاج إلى إجراء بعض التحليل لإنشاء تقرير.لدي ورقة الأنماط الخاصة بي التي تعمل على مستند واحد بشكل جيد، ولكنني أرغب في توسيع ذلك دون الانتقال إلى أداة أخرى لدمج مستندات XML.

كنت أفكر على هذا المنوال:

<xsl:for-each select="{IO Selector Here}">
    <xsl:variable select="document(@url)" name="contents" />
    <!--More stuff here-->
</xsl:for-each>
هل كانت مفيدة؟

المحلول

في XSLT 2.0 ومع Saxon، يمكنك القيام بذلك باستخدام ملف collection() وظيفة:

<xsl:for-each select="file:///path/to/directory">
  <!-- process the documents -->
</xsl:for-each>

يرى http://www.saxonica.com/documentation/sourcedocs/collections.html لمزيد من التفاصيل.

في XSLT 1.0، يتعين عليك إنشاء فهرس يسرد المستندات التي تريد معالجتها باستخدام أداة منفصلة.قد توفر بيئتك مثل هذه الأداة؛على سبيل المثال، يحتوي Cocoon على مولد الدليل الذي يخلق مثل هذا الفهرس.ولكن دون معرفة ما هي بيئتك، فمن الصعب معرفة ما يجب أن توصي به.

نصائح أخرى

وكما قال آخرون، لا يمكنك القيام بذلك بطريقة مستقلة عن النظام الأساسي.في عالم .NET، يمكنك إنشاء XmlResolver مخصص بحيث يقوم هذا المستند ('dir://c:/foo/') بإرجاع قائمة الملفات الموجودة في الدليل 'c:\foo' بالتنسيق العشوائي الذي تريده.راجع الروابط التالية لمزيد من المعلومات حول XmlResolver المخصص:

تخصيص فئة XmlUrlResolver
قوة XmlResolver

كما يمكنك اللجوء إلى استخدام البرامج النصية (مثل msxsl:script عنصر) أو ملحقات في ورقة أنماط XSLT الخاصة بك.

كل هذه الأساليب ستجعل رمز XSLT الخاص بك غير قابل للنقل إلى الأنظمة الأساسية الأخرى.

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

إذا كان لديك مستند رئيسي واحد ومجموعة ثابتة من المستندات الداعمة، فمن المحتمل أن تستخدم ملف document() وظيفة لإرجاع عقد و/أو قيم محددة، لكنني أظن أن حالتك مختلفة.

من داخل XSLT أعتقد أن هذا لن يكون ممكنًا.

يمكنك تمرير جميع أسماء ملفات XML إلى <xsl:param name="files" /> كقائمة مفصولة بفواصل والتكرار فوقها باستخدام العودية وسلسلة فرعية قبل () وسلسلة فرعية بعد ().

لدي أداة سطر أوامر يمكن استخدامها لهذا - فهي تستخدم معالج XSLT المدمج في Ant (أداة بناء جافا) لمعالجة الإدخال + التحويل إلى إخراج.سيكون من السهل الالتفاف بملف دفعي للحلقة.

svn://donie.homeip.net/public/tools

إذا كنت تستخدم .Net، فيمكنك استخدام XsltExtension لإجراء مكالمات من مستند XSLT الخاص بك إلى الأساليب الموجودة في فئة .net الخاصة بك.يمكن للطريقة بعد ذلك إرجاع مجموعات العقد مرة أخرى إلى XSLT الخاص بك.لذلك يمكن لطريقتك التعامل مع جزء الملف IO.

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