2008-09-19 14 views
6

एक एक्सएसएलटी दस्तावेज़ के भीतर, क्या वर्तमान निर्देशिका में फ़ाइलों के एक सेट पर लूप करना संभव है?एकाधिक फ़ाइल इनपुट?

मैं एक स्थिति है जहाँ मैं एक निर्देशिका xml फ़ाइलें कुछ विश्लेषण एक रिपोर्ट तैयार करने के लिए किया है कि जरूरत से भरा होता है। मेरे पास एक स्टाइलशीट एक ही दस्तावेज़ पर चल रही है, लेकिन मैं एक्सएमएल दस्तावेज़ों को मर्ज करने के लिए किसी अन्य टूल पर जाकर इसे विस्तारित करना चाहता हूं।

मैं इन पंक्तियों के साथ सोच रहा था:

<xsl:for-each select="{IO Selector Here}"> 
    <xsl:variable select="document(@url)" name="contents" /> 
    <!--More stuff here--> 
</xsl:for-each> 

उत्तर

8

XSLT 2.0 में, और सैक्सन के साथ, आप 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 में, आप एक सूचकांक कि दस्तावेजों तो आपको एक अलग उपकरण के साथ कार्रवाई करने के लिए सूचीबद्ध है बनाना होगा। आपका पर्यावरण ऐसा उपकरण प्रदान कर सकता है; उदाहरण के लिए, कोकून में Directory Generator है जो ऐसी अनुक्रमणिका बनाता है। लेकिन यह जानने के बिना कि आपका पर्यावरण क्या है, यह जानना मुश्किल है कि क्या सिफारिश करनी है।

0

मुझे नहीं लगता कि XSL कि जिस तरह से काम करने के लिए सेट किया गया है: यह एक या अधिक दस्तावेजों पर कुछ और के द्वारा किया जा करने के लिए बनाया गया है, और कुछ और उन फाइलों को ढूंढने के लिए ज़िम्मेदार होगा जिनके लिए एक्सएसएलटी लागू किया जाना चाहिए।

यदि आप एक मुख्य दस्तावेज़ और समर्थन दस्तावेज की एक निश्चित सेट, आप संभवतः document() function इस्तेमाल कर सकते हैं विशिष्ट नोड्स और/या मूल्यों वापस जाने के लिए किया था, लेकिन मुझे लगता है आपके मामले में अलग है।

0

एक्सएसएलटी के भीतर से मुझे लगता है कि यह संभव नहीं होगा।

आप एक < XSL के लिए सभी एक्सएमएल फ़ाइल नाम प्रेषित कर सकता है: परम नाम = "फ़ाइलें"/> एक अल्पविराम के रूप में सूची और पाश अलग से अधिक यह प्रत्यावर्तन और स्ट्रिंग-से पहले() और स्ट्रिंग के बाद() का उपयोग कर। यह XSLT प्रोसेसर चींटी (जावा निर्माण उपकरण) में बनाया गया इनपुट पर कार्रवाई + उत्पादन में रूपांतरित करने के उपयोग करता है -

0

मैं एक कमांड लाइन उपकरण है कि इस के लिए इस्तेमाल किया जा सकता है। लूप के लिए बैच फ़ाइल के साथ लपेटना आसान होगा।

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

2

जैसा कि अन्य ने कहा, आप इसे मंच-स्वतंत्र तरीके से नहीं कर सकते हैं। .NET दुनिया में, आप एक कस्टम XmlResolver बना सकते हैं ताकि दस्तावेज़ ('dir: // c:/foo /') आपके द्वारा इच्छित मनमानी प्रारूप में 'c: \ foo' निर्देशिका में फ़ाइलों की सूची वापस कर देगा। कस्टम XmlResolver के बारे में अधिक जानकारी के लिए निम्न लिंक देखें:

Customizing the XmlUrlResolver Class
The power of XmlResolver

इसके अलावा, आप स्क्रिप्ट (msxsl:script तत्व) की तरह अपने XSLT स्टाइलशीट में का उपयोग कर या एक्सटेंशन का सहारा हो सकता है।

इन सभी दृष्टिकोणों अपने XSLT कोड अन्य प्लेटफार्मों के लिए unportable कर देगा।

0

आप उपयोग कर रहे हैं नेट आप XsltExtension उपयोग कर सकते हैं अपने .net वर्ग में तरीकों के लिए अपने XSLT दस्तावेज़ से कॉल करने के लिए। विधि तब आपके XSLT पर वापस नोड्ससेट वापस कर सकती है। तो आपकी विधि फ़ाइल IO भाग को संभाल सकती है।

संबंधित मुद्दे