2011-03-11 14 views
8

जावा में ट्रांसफ़ॉर्मेशन, एक TransformerFactory से, और यह तरीकों है:अंतर XSLT कार्रवाई करने के लिए वस्तुओं बनाने के लिए

  • newTransformer जो Transformer वस्तु है, जो एक परिणाम में एक्सएमएल बदल सकता है बनाता है ।
  • newTemplates जो Templates ऑब्जेक्ट बनाता है जो Transformer बना सकता है।

Transformer के लिए दस्तावेज़ स्पष्ट रूप से कहा:

एक ट्रांसफार्मर कई बार इस्तेमाल किया जा सकता है।

मेरा एप्लिकेशन एक ही एक्सएसएलटी के साथ विभिन्न अलग-अलग एक्सएमएल को संसाधित करता है। कार्यक्रम की शुरुआत में मैं का उपयोग Transformer बनाने के लिए करता हूं, फिर इसे सभी एक्सएमएल के लिए पुन: उपयोग करें (सुनिश्चित करें कि यह सिंक्रनाइज़ है इसलिए मैं इसे केवल एक थ्रेड से उपयोग करता हूं; और प्रत्येक प्रसंस्करण से पहले reset() विधि को कॉल करता हूं।)।

इस तरह से मैं प्रत्येक XML I प्रक्रिया के लिए XSLT को फिर से संकलित करने की लागत नहीं लेता।

तो newTemplates और Templates ऑब्जेक्ट का बिंदु क्या है? क्या मुझे इसके बजाय इसका उपयोग करना चाहिए, और प्रत्येक XML के लिए एक नया Transformer ऑब्जेक्ट बनाना चाहिए?

+2

'xsltprocessor' ऐसे प्रश्नों के लिए एक और विशिष्ट टैग है। Retagged। – Flack

उत्तर

6

यदि आप एक ही थ्रेड में चल रहे हैं, तो शायद आपको बहुत अंतर दिखाई नहीं देगा।

प्रदर्शन हमेशा एपीआई विनिर्देश के बजाय कार्यान्वयन पर निर्भर करता है। सैक्सन के साथ, जब आप ट्रांसफॉर्मर का पुन: उपयोग करते हैं, तो यह दस्तावेज़() फ़ंक्शन का उपयोग करके लोड किए गए दस्तावेज़ों के कैश को बरकरार रखता है। यह अगला या बुरा हो सकता है कि अगला परिवर्तन उसी स्रोत दस्तावेज़ों तक पहुंचने जा रहा है या नहीं। आम तौर पर मेरी सलाह है कि प्रत्येक परिवर्तन के लिए एक नया ट्रांसफार्मर का उपयोग करें, लेकिन निश्चित रूप से उसी टेम्पलेट ऑब्जेक्ट का उपयोग करना।

+0

+1 जानकारी के लिए धन्यवाद! –

4

newTemplates() स्टाइलशीट को आंतरिक प्रतिनिधित्व में संकलित करता है जिसे पुन: उपयोग किया जा सकता है। यह बाइटकोड में एक व्याख्या की गई भाषा (जैसे पायथन) को संकलित करने और बाइटकोड को सहेजने के बराबर है, क्योंकि प्रत्येक बार इसे चलाने के बाद इसे पुन: परिभाषित करने के विपरीत।

+0

आप 'न्यूट्रांसफॉर्मर' के साथ इसकी तुलना कैसे करेंगे, निश्चित रूप से यह वही है जो यह भी करता है? –

+0

हां, लेकिन यह संकलित स्टाइलशीट –

+0

को सहेजता नहीं है यदि आप 'ट्रांसफॉर्मर' ऑब्जेक्ट का पुन: उपयोग करते हैं, तो यह केवल स्टाइलशीट को संकलित करता है, इसलिए उस अर्थ में 'newTransfomer' संकलित और संकलित स्टाइलशीट को सहेजें, जैसे 'newTemplates' करता है (या मैंने कुछ गलत समझा?) –

6

मुख्य अंतर यह है कि Templates थ्रेड-सुरक्षित है और Transformer नहीं है। इसके अलावा, प्रलेखन का तात्पर्य है कि प्रदर्शन अनुकूलन Templates उदाहरण के निर्माण के दौरान लागू किया जा सकता है। इसलिए, Templates इंस्टेंस का प्रारंभिक निर्माण अधिक महंगा हो सकता है, लेकिन इसका वास्तविक उपयोग प्रदर्शन लाभ प्रदान कर सकता है। यदि आपको पहले से ही सिंक्रनाइज़ेशन और रीसेट को मैन्युअल रूप से प्रबंधित करना है, तो मैं कहूंगा कि Templates आपके ध्यान के लिए भीख मांग रहा है ...

+0

ठीक है, लेकिन अगर मैं टेम्पलेट के लिए एक्सएसएल नहीं है तो ट्रांसफॉर्मर फैक्टरी.न्यू ट्रान्सफॉर्मर() की कॉलिंग में सुधार कैसे कर सकता हूं? –

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