2008-09-01 15 views
5

私は次の操作を実行したいとエレガントな方法を見つけることができません。XML - リソースから読み取り、操作し、表示

  1. はを移入System.Xml.XmlDocument
  2. にXMLテンプレートを読みます私のUI
  3. からのデータは、私が
  4. CSSスタイルシート
  5. WebBrowser制御
  6. 01にそれをレンダリング適用書いた XSLTでそれを変換します

私は現在、ディスク上のファイルから読み込み、読み込みした後、読み込んだ後にディスクに保存しています。テンプレートのXSLTを参照し、XSLTCSSを参照し、WebBrowser.Navigate([filename])メソッドを使用してXMLファイルを表示します。

もちろん、私はこのアプリをデプロイするために来たときに、ファイルがディスク上に存在しないだろうと、それは恐ろしく破るよ、と彼らは「と私はXMLファイルにXSLTCSSファイルを参照することができませんリソースです。テンプレートをリソースとして含める予定ですが、そこから進めるためのきちんとした方法はありません。

何かお手伝いがあります。

+0

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

答えて

1

クイック質問。なぜXmlテンプレートが必要ですか?手前でスキーマをすでに知っている場合は、コード内に完全なXMLを生成するだけです。テンプレートファイルを読み込む必要はありません。

0

Linq to XMLをチェックしてください。これは、XMLベースのデータを作成して読むのには本当に良い方法です。 System.Xml.XmlDocumentメカニズムより簡単です。

あなたはXSLTとCSSを提供しているので、XHTMLでページを構築してCSSをインライン化してみませんか?または、XSLTファイルとCSSファイルをインストーラのコンテンツとして追加するだけです。

コンパイルされたヘルプは、あなたが記述しているもののように実際に何かを行います - あなたはCHMファイルからリンクをコピーし、通常のブラウザでそれを訪問することができます。あなたのディスプレイリソースは、使用方法に応じてヘルプファイルに埋め込むことができます。

1

キースのリンクありがとうございました。LINQは私の知るべきことのリストに載っているので、興味のあることを見ていきます。残念ながら、私はこのアプリのために.Net 2.0をターゲットにする必要があるので、LINQが問題になっていないと思う(私が間違っていると私を修正してください)!

私は今CSSをXSLTのヘッダーに含めました。System.Xml.Xsl.XslCompiledTransformオブジェクトを使用してメモリ内のXMLを変換する方法を見つけました。私は現在WebBrowser.DocumentTextプロパティを使用してWebBrowserコンポーネントにフォーマットされたXMLを渡していますが、これはうまくいくようです。

私はこれが最良の方法ではないと考えているので、より良い方法についてのコメントがあれば幸いです。特に、私がLINQを使用していた場合、バインドするスキーマが必要でしょうか?また、スキーマを完全に停止する必要がありますか?私はXMLにはあまり似合っていませんが、テンプレートを使用するのではなく、スキーマから直接生成するというVaibhavの考えが好きです。私はどこから始めるべきかわからないので、どんなポインターも感謝しています!

0

あなたは、WebBrowserコントロールを使用してされているためではない WPFあなたが「この周りの唯一の方法は、ロードするためにResource Hackerのようなツールを使用することです。ステップ4で、あなたが言及したCSSファイルをロードするために、ディスクに依存しなければなりません実際のマイクロソフトの1990年代のノスタルジアにはres://プロトコル(http://msdn.microsoft.com/en-us/library/aa767740(VS.85).aspx)を使用してください。

あなたはまだ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名前空間であることに注意してくださいがあります。これらの発言は役に立ちませんが、私は試しました:)

関連する問題