2009-06-30 14 views
9

सी # में एचटीएमएल पार्सिंग के लिए एक्सएसएलटी या लिंक से एक्सएमएल का उपयोग करने के लिए क्या फायदे हैं? यह धारणा के तहत है कि एचटीएमएल को साफ कर दिया गया है, इसलिए यह वैध xhtml है। ये मान अंततः मान्य और संसाधित होने के लिए एक सी # ऑब्जेक्ट में जाएंगे।एक्सएसएलटी या लिंक से एक्सएमएल

कृपया मुझे बताएं कि क्या ये वैध हैं और यदि अन्य बातों पर विचार करना है।

XSLT लाभ: जल्दी से बदल सकते हैं और

  • काफी अच्छी तरह से ज्ञात
  • XSLT नुकसान को तैनात करने के

    • आसान:

      • संकलित नहीं है, तो
      • कार्रवाई करने के लिए धीमी है
      • स्ट्रिंग मैनिपुलेशन cumberso हो सकता है मुझे
      • विल अधिक अंत

      Linq एक्सएमएल लाभ के लिए कम से सी # वस्तु में पाने के लिए चुनौतीपूर्ण:

      • संकलित, तो यह तेजी से चलाता है
      • बेहतर स्ट्रिंग हेरफेर के लिए अनुमति देता है

      लिंक से एक्सएमएल नुकसान:

      • अद्यतन
      • के लिए संकलित किया जाना चाहिए

      संपादित करें: मैं स्पष्ट करना चाहिए, मैं इन लंबे समय तक चलाना चाहते हैं एक वेबसाइट अपने लेआउट एक बार जब अद्यतन कर सकते हैं। यह एक बड़ा कारण था, मैंने सोचा कि मैं ऐसा कुछ उपयोग करूंगा जिसे संकलन की आवश्यकता नहीं है।

    +1

    विजुअल स्टूडियो xsltc.exe लाता है (सुनिश्चित नहीं है कि यह पहले से ही मानक संस्करण के साथ शामिल है) जो आपको अपने एक्सएसएलटी से एक असेंबली (इंटरमीडिएट भाषा में डीएल) संकलित करने की अनुमति देता है। तो रनटाइम पर एक्सएसएलटी संकलन के लिए जरूरी नहीं है। –

    +1

    एक्सएसएलटी मेरी राय में डीबग करने का दर्द है। एक्सएमएल से लिंक अधिक डिबगबल है ... यदि आप अपने जंजीर बयान तोड़ते हैं। –

    +2

    @ फ्रैंक: क्या आपने वीएस 2008 के एक्सएसएलटी डीबगर (या अन्य एक्सएसएलटी आईडीई जैसे ऑक्सीजन या अल्टोवा एक्सएमएलएसपी) की जांच की है? वे आपको अपने एक्सएसएल ट्रांसफॉर्म के माध्यम से कदम उठाने देते हैं जैसे कि आप सी # या जावा कोड से आगे बढ़ेंगे। –

    उत्तर

    14

    आगे आपके उपयोग के मामले को जानने के बिना यह आप सामान्य सुझाव देने के लिए कठिन है।

    किसी भी तरह, आप कुछ हद तक सेब और संतरे की तुलना कर रहे हैं। LINQ एक्सएमएल (और सामान्य रूप में LINQ) एक क्वेरी भाषा जबकि XSLT को XML वृक्ष संरचना को बदलने के लिए एक प्रोग्रामिंग भाषा है। ये अलग-अलग अवधारणाएं हैं। आप एक प्रश्न भाषा का प्रयोग जब भी आप एक डेटा स्रोत से जानकारी की एक निश्चित विशिष्ट टुकड़ा निकालने के लिए जो कुछ भी आप इसे (एक सी # वस्तु में फ़ील्ड्स सेट करने के लिए यह हो) के साथ क्या करने की जरूरत क्या करना चाहते हैं। एक परिवर्तन, इसके विपरीत, एक और एक्सएमएल प्रतिनिधित्व में अपने डेटा से एक एक्सएमएल प्रतिनिधित्व कन्वर्ट करने के लिए उपयोगी होगा।

    इसलिए यदि आपके उद्देश्य एक्सएमएल से सी # वस्तुओं बनाने के लिए है, तो आप शायद नहीं XSLT उपयोग करना चाहते हैं, लेकिन XML डेटा संसाधित करने के लिए .NET फ्रेमवर्क द्वारा की पेशकश की अन्य प्रौद्योगिकियों के किसी भी: वर्ष XmlDocument, XmlReader, XPathDocument, XmlSerializer या XDocument।इनपुट आकार, इनपुट जटिलता, वांछित आउटपुट इत्यादि के आधार पर प्रत्येक के पास इसके विशेष फायदे और नुकसान होते हैं।

    चूंकि आप केवल HTML से ही काम कर रहे हैं, तो आप कोडप्लेक्स पर HTML Agility Pack पर भी देखना चाहेंगे।

    +0

    इंगित करता है धन्यवाद, मैं चपलता पैक का उपयोग कर रहा हूं। उदाहरणों में से एक एक्सएसएलटी का उपयोग करता है, जिसने मुझे और अधिक शोध करने का नेतृत्व किया। – BenMaddox

    +1

    LINQ शायद एक क्वेरी भाषा है, लेकिन यह मेरी समझ है कि माइक्रोसॉफ्ट एक्सएलटीटी 2 समर्थन को .NET में कार्यान्वित करने पर रोक रहा है क्योंकि वे लोगों को – zeocrash

    1

    जब से तुम सी # करने के लिए जा रहे हैं, कुछ बिंदु आपके डेटा Linq के माध्यम से जाना जा रहा है (या नेट के लिए कुछ अन्य XML कोड) में वैसे भी, क्या आप इसे भी सब वहाँ रहना हो सकता है।

    जब तक आप आप पहले से ही अनुभव या तैनाती के लिए बहुत कुछ है जैसे XSLT साथ जाने के लिए, कुछ सम्मोहक कारण है दृढ़ता से पाठ फ़ाइलों को बाहर चल के पक्ष में है, यह सब एक ही स्थान पर रहते हैं।

    -1

    यदि आप HTML को पार्स करने का प्रयास कर रहे हैं तो आपको या तो का उपयोग नहीं करना चाहिए। एचटीएमएल! = एक्सएमएल और इसका इलाज नहीं किया जा सकता है। उदाहरण के लिए भागने अनुक्रम '& nbsp;' एचटीएमएल में पूरी तरह से मान्य है लेकिन वैध XML दस्तावेज़ के भीतर एक वैध इकाई नहीं है (डीटीडी आदि के साथ गंभीर गड़बड़ी के बिना)। यह आपको काट देगा, मेरा विश्वास करो!

    मैं HTML Agility pack - शानदार लाइब्रेरी का उपयोग करने की भी सिफारिश करता हूं।

    +0

    के बजाय linq का उपयोग करने के लिए "प्रोत्साहित" करना चाहते हैं। मैं यह उल्लेख करना भूल गया था कि मैं पहले से ही उस पैक का उपयोग कर रहा था। – BenMaddox

    0

    एचटीएमएल एजिलिटी पैक?

    मुझे आज़माएं।

    1

    मेरे अनुभव में, एक्सएसएलटी अधिक संक्षिप्त और पठनीय है जब आप मुख्य रूप से पुन: व्यवस्थित करने और मौजूदा एक्सएमएल तत्वों का चयन करने के लिए काम कर रहे हैं। XPath संक्षिप्त और समझने में आसान है, और एक्सएमएल सिंटैक्स XElement और XAttribute कथन के साथ आपके कोड को कूड़े हुए से बचाता है। एक्सएसएलटी एक एक्सएमएल-पेड़ भाषा बदलने के रूप में ठीक काम करता है।

    हालांकि, यह स्ट्रिंग हैंडलिंग खराब है, लूपिंग अनजान है, और subroutines की कोई सार्थक अवधारणा नहीं है - आप दूसरे ट्रांसफॉर्म के आउटपुट को बदल नहीं सकते हैं।

    तो, यदि आप वास्तव में तत्व और विशेषता सामग्री के साथ बेवकूफ़ बनाना चाहते हैं, तो यह जल्दी से कम हो जाता है। संरचना का सामान्यीकरण करने के लिए आकस्मिक रूप से - एक्सएसएलटी दोनों का उपयोग करने में कोई समस्या नहीं है (कहें, यह सुनिश्चित करने के लिए कि सभी table तत्वों में tbody तत्व हैं), और linq-to-xml इसे समझने के लिए। प्राथमिकतापूर्ण सशर्त मिलान संभावनाओं का मतलब है कि कई समान लेकिन विशिष्ट मैचों से निपटने के दौरान एक्सएसएलटी का उपयोग करना आसान है। Xslt दस्तावेज़ सरलीकरण पर अच्छा है, लेकिन इसमें अभी भी बहुत अधिक बुनियादी सुविधाएं अनुपलब्ध हैं।

    लिंक-टू-एक्सएमएल बैंडवागन पर पूरी तरह से दिल से कूदने के बाद, मैं कहूंगा कि एक्सएसएलटी के साथ यह कम ओवरलैप है जो पहली नज़र में दिख सकता है। (और मैं .NET के लिए एक एक्सएसएलटी 2.0/XQuery 1.0 कार्यान्वयन को सकारात्मक रूप से देखना पसंद करूंगा)।

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

    जो भी आप करते हैं, एक्सएसएलटी का दुरुपयोग करने की कोशिश न करें, तर्क के सबसे सरल लेकिन कुछ भी करने के लिए इसका उपयोग करके: यह तरीका अधिक शब्दावली और बराबर सी # की तुलना में बहुत कम पठनीय है। यदि आपको तर्क की एक गुच्छा की आवश्यकता है (date > DateTime.Now ? "will be" : "has" जैसे साधारण चीजें एक्सएसएलटी में भारी फूला हुआ हैक्स बनती हैं) और आप एक्सएसएलटी और लिंक दोनों एक्सएमएल का उपयोग नहीं करना चाहते हैं, तो लिंक का उपयोग करें।

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