[英]XML in C# - Read from Resources, Manipulate and Display
我想做以下事情,找不到優雅的方式:
System.Xml.XmlDocument
XSLT
對它進行轉換 CSS
樣式表 WebBrowser
控件 我目前正在從磁盤上的文件中讀取它,填充它,然后在填充后將其保存回磁盤。 我引用XSLT
模板,和CSS
在XSLT
,然后使用WebBrowser.Navigate([filename])
方法來顯示該XML文件。
顯然,當我來部署這個應用程序時,它會因為文件不存在於磁盤上而可怕地破壞,並且我將無法在XML
文件中引用XSLT
和CSS
文件,因為它們將是資源。 我打算將模板作為資源包含在內,但無法從中找到一種巧妙的方法。
任何幫助非常感謝
快問。 為什么需要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.