2008-09-01 16 views
5

प्रदर्शित करें मैं निम्नलिखित करना चाहते हैं और एक सुंदर तरीका नहीं मिल रहा: के साथ यह आबादएक्सएमएल - संसाधन से पढ़ें, हेरफेर और

  1. एक System.Xml.XmlDocument
  2. में एक एक्सएमएल टेम्पलेट पढ़ें मेरी यूआई से डेटा
  3. एक WebBrowser नियंत्रण के लिए लागू करें एक XSLT मैं
  4. लिखे से यह रूपांतरण एक CSS स्टाइल शीट
  5. यह प्रस्तुत

मैं वर्तमान में इसे डिस्क पर एक फ़ाइल से पढ़ रहा हूं, इसे पॉप्युलेट कर रहा हूं, फिर इसे पॉप्युलेट करने के बाद डिस्क पर वापस सहेज रहा हूं। मैं टेम्पलेट में XSLT का संदर्भ देता हूं, और CSSXSLT में संदर्भित करता हूं और फिर XML फ़ाइल को प्रदर्शित करने के लिए WebBrowser.Navigate([filename]) विधि का उपयोग करता हूं।

जाहिर

, जब मैं इस एप्लिकेशन को तैनात करने के लिए आते हैं, यह बुरी तरह से विभाजित करेंगे के रूप में फ़ाइल डिस्क पर मौजूद नहीं होगा, और मैं XML फ़ाइल में XSLT और CSS फ़ाइलों को संदर्भित करने के रूप में वे 'में सक्षम नहीं होगा संसाधन होंगे। मैं टेम्पलेट को संसाधन के रूप में शामिल करने की योजना बना रहा हूं, लेकिन वहां से आगे बढ़ने के लिए एक साफ तरीका नहीं मिल रहा है।

किसी भी मदद की सराहना

+0

http://stackoverflow.com/questions/851813/load-an-xml-from-resources?rq=1 – VMAtm

उत्तर

1

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

0

Linq to XML देखें - यह एक्सएमएल आधारित डेटा लिखने और पढ़ने का वाकई अच्छा तरीका है। System.Xml.XmlDocument तंत्र से आसान है।

यह देखते हुए कि आप एक्सएसएलटी और सीएसएस की आपूर्ति कर रहे हैं, एक्सएचटीएमएल में पेज क्यों नहीं बनाते और सीएसएस को इनलाइन क्यों नहीं करते? वैकल्पिक रूप से बस अपने इंस्टॉलर में सामग्री के रूप में एक्सएसएलटी और सीएसएस फाइलें जोड़ें।

संकलित सहायता वास्तव में कुछ वर्णन करता है जो आप वर्णन कर रहे हैं - आप एक सीएचएम फ़ाइल से एक लिंक कॉपी कर सकते हैं और इसे सामान्य ब्राउज़र से देख सकते हैं। मुझे लगता है कि आप अपने प्रदर्शन संसाधनों को एक सहायता फ़ाइल में एम्बेड कर सकते हैं, इस पर निर्भर करते हुए कि उनका उपयोग कैसे किया जाता है।

1

किथ लिंक के लिए धन्यवाद, मैं उस रूचि से बाहर देखूंगा, क्योंकि LINQ सीखने के लिए मेरी चीजों की सूची में है। दुर्भाग्यवश, मुझे इस ऐप के लिए .Net 2.0 को लक्षित करने की आवश्यकता है, इसलिए मुझे लगता है (यदि मैं गलत हूं तो कृपया मुझे सही करें!) कि LINQ प्रश्न से बाहर है।

अब मैंने एक्सएसएलटी के शीर्षलेख में सीएसएस को शामिल किया है, और मुझे स्मृति में XML को बदलने के लिए System.Xml.Xsl.XslCompiledTransform ऑब्जेक्ट का उपयोग करने का एक तरीका मिला है। मैं वर्तमान में WebBrowser.DocumentText प्रॉपर्टी का उपयोग कर रहा हूं ताकि स्वरूपित XML को WebBrowser componenet में पास किया जा सके और ऐसा लगता है।

मैं यह सोचने में मदद नहीं कर सकता कि यह चीजों को करने का सबसे अच्छा तरीका नहीं है, इसलिए बेहतर तरीकों पर किसी भी टिप्पणी की सराहना की जाएगी। विशेष रूप से, अगर मैं LINQ का उपयोग कर रहा था, तो क्या मुझे एक स्कीमा को बांधने की आवश्यकता होगी, और साथ ही, क्या मुझे स्कीमा पूर्ण-स्टॉप होना चाहिए? मैं एक्सएमएल के साथ अच्छा नहीं हूं, लेकिन मुझे टेम्पलेट का उपयोग करने के बजाय सीधे स्कीमा से उत्पन्न करने के वैभव के विचार पसंद हैं। मुझे यकीन नहीं है कि कहां से शुरू करना है, इसलिए किसी भी पॉइंटर्स की सराहना की!

0

आप WebBrowser नियंत्रण और नहीं WPF प्रयोग कर रहे हैं क्योंकि चाहिए चरण 4. इस के चारों ओर एक ही रास्ता लोड करने के लिए Resource Hacker जैसे किसी उपकरण का उपयोग करने के लिए है में सीएसएस फ़ाइल आप का उल्लेख लोड करने के लिए डिस्क पर निर्भर करते हैं " अप्रबंधित "संसाधनों और res का उपयोग करें: // प्रोटोकॉल (http://msdn.microsoft.com/en-us/library/aa767740(VS.85).aspx) कुछ वास्तविक माइक्रोसॉफ्ट 1 99 0 के नास्टलग्जा के लिए।

आपको अभी भी अपना डेटा HTML तत्वों में प्राप्त करने की आवश्यकता होगी।

void WireUpBrowserEvents() 
{ 

    HtmlElement table = this._browser.Document.GetElementById("UnitFormsTable"); 
    if (table != null) 
    { 
     HtmlElementCollection thead = table.GetElementsByTagName("thead"); 
     if ((thead != null) && (thead.Count == 1)) 
     { 
      HtmlElementCollection links = thead[0].GetElementsByTagName("a"); 
      if ((links != null) && (links.Count > 0)) 
      { 
       foreach (HtmlElement a in links) 
       { 
        a.Click += new HtmlElementEventHandler(XslSort_Click); 
       } 
      } 
     } 
    } 
} 

void XslSort_Click(object sender, HtmlElementEventArgs e) 
{ 
    e.ReturnValue = false; 

    if (this._xslSortWorker.IsBusy) return; 

    if (sender is HtmlElement) 
    { 
     HtmlElement a = sender as HtmlElement; 
     this._browser.Hide(); 
     this._browserMessage.Visible = true; 
     this._browserMessage.Refresh(); 
     this._xslSortWorker.RunWorkerAsync(a.Id); 
    } 
} 

आप पहले से ही पता है कि HtmlElement और HtmlElementCollection System.Windows.Forms नाम स्थान में हैं हो सकता है: कोड नमूना इस प्रकार है कि मदद कर सकता है कुछ जवाब देने के लिए। ये टिप्पणियां सहायक नहीं हो सकतीं लेकिन मैंने कोशिश की :)

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