簡體   English   中英

C#中的XML - 從資源,操作和顯示中讀取

[英]XML in C# - Read from Resources, Manipulate and Display

我想做以下事情,找不到優雅的方式:

  1. 將XML模板讀入System.Xml.XmlDocument
  2. 使用我的UI中的數據填充它
  3. 用我編寫的XSLT對它進行轉換
  4. 應用CSS樣式表
  5. 將其渲染為WebBrowser控件

我目前正在從磁盤上的文件中讀取它,填充它,然后在填充后將其保存回磁盤。 我引用XSLT模板,和CSSXSLT ,然后使用WebBrowser.Navigate([filename])方法來顯示該XML文件。

顯然,當我來部署這個應用程序時,它會因為文件不存在於磁盤上而可怕地破壞,並且我將無法在XML文件中引用XSLTCSS文件,因為它們將是資源。 我打算將模板作為資源包含在內,但無法從中找到一種巧妙的方法。

任何幫助非常感謝

快問。 為什么需要Xml模板? 如果您已經預先了解了架構,那么只需在代碼中生成完整的Xml。 不需要加載模板文件。

感謝Keith的鏈接,我會看看感興趣,因為LINQ在我要學習的東西列表中。 不幸的是,我需要針對這個應用程序定位.Net 2.0,所以我認為(請糾正我,如果我錯了!)LINQ是不可能的。

我現在已經將CSS包含在XSLT的頭文件中,並且我找到了一種方法來使用System.Xml.Xsl.XslCompiledTransform對象來轉換內存中的XML。 我目前正在使用WebBrowser.DocumentText屬性將格式化的XML傳遞到WebBrowser組件中,這似乎有效。

我不禁想到這不是最好的做事方式,所以任何關於更好方法的評論都會受到贊賞。 特別是,如果我使用LINQ,我是否需要一個模式來綁定,而且,我應該有一個模式完全停止嗎? 我對XML並不擅長,但我喜歡Vaibhav直接從模式生成而不是使用模板的想法。 我只是不確定從哪里開始,所以任何指針都贊賞!

因為您使用的是WebBrowser控件而不是 WPF,所以您必須依賴磁盤來加載您在步驟4中提到的CSS文件。唯一的方法是使用Resource Hacker之類的工具來加載“非托管”資源並使用res :// protocol( http://msdn.microsoft.com/en-us/library/aa767740 ( VS.85 ) .aspx )對於一些真正的微軟90年代的懷舊情緒。

您仍然需要將數據轉換為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命名空間中。 這些評論可能沒有用,但我試過:)

查看Linq to XML - 這是編寫和讀取基於Xml的數據的好方法。 比System.Xml.XmlDocument機制更容易。

鑒於您正在提供XSLT和CSS,為什么不在XHTML中構建頁面並內聯CSS? 或者,只需將XSLT和CSS文件作為內容添加到安裝程序中。

編譯的幫助實際上做了類似於你所描述的內容 - 你可以從CHM文件中復制一個鏈接並使用普通的瀏覽器訪問它。 我想您可以將顯示資源嵌入到幫助文件中,具體取決於它們的使用方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM