5

私は次のことをしたいのですが、エレガントな方法が見つかりません:

  1. XML テンプレートをSystem.Xml.XmlDocument
  2. UI からのデータを入力する
  3. XSLT私が書い た
  4. CSSスタイルシート を適用する
  5. WebBrowserコントロールにレンダリングする

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

明らかに、このアプリを展開すると、ファイルがディスク上に存在しないため、恐ろしく壊れます。また、ファイル内のXSLTおよびCSSファイルはXMLリソースになるため、それらを参照できません。テンプレートをリソースとして含めることを計画していますが、そこから先に進むための適切な方法が見つかりません。

どんな助けでも大歓迎です

4

4 に答える 4

1

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

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

これが最善の方法ではないと思わざるを得ないので、より良い方法についてのコメントをいただければ幸いです。特に、LINQ を使用している場合、バインド先のスキーマが必要ですか? また、スキーマを完全に指定する必要がありますか? 私は XML が苦手ですが、テンプレートを使用するのではなく、スキーマから直接生成するという Vaibhav のアイデアは気に入っています。どこから始めればいいのかわからないので、どんな指針でも大歓迎です!

于 2008-09-01T16:30:31.283 に答える
1

簡単な質問です。Xml テンプレートが必要な理由 事前にスキーマを知っている場合は、コードで完全な Xml を生成するだけです。テンプレート ファイルをロードする必要はありません。

于 2008-09-01T13:29:09.860 に答える
0

WPFではなくWebBrowser コントロールを使用しているため、手順 4 で説明した CSS ファイルを読み込むには、ディスクに依存する必要があります。これを回避する唯一の方法は、 Resource Hackerなどのツールを使用して「管理されていない」リソースを読み込み、res ://プロトコル ( http://msdn.microsoft.com/en-us/library/aa767740(VS.85).aspx ) は、Microsoft の 1990 年代の懐かしさを感じさせるものです。

データを 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 名前空間にあることは既にお気づきかもしれません。これらの発言は役に立たないかもしれませんが、試してみました:)

于 2008-10-03T00:31:38.347 に答える
0

Linq to XML を確認してください。これは、Xml ベースのデータを読み書きするための非常に優れた方法です。System.Xml.XmlDocument メカニズムよりも簡単です。

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

コンパイルされたヘルプは、実際にあなたが説明しているようなことをします.CHMファイルからリンクをコピーして、通常のブラウザでアクセスできます. 使用方法に応じて、表示リソースをヘルプ ファイルに埋め込むことができると思います。

于 2008-09-01T15:00:44.290 に答える