2011-12-23 14 views
2

請告訴我爲什麼這兩個不給我相同的XmlDocument對象。處理嵌入在.NET程序集中的XML與外部文件:我的代碼有什麼問題?

  1. 我可以使用此代碼成功地加載外部 XML文件,併成功地處理XML文件:

    var xElem = XElement.Load("Products.xml"); 
    
  2. 現在我嵌入XML文件作爲嵌入式資源在裝配代替:

    var assembly = Assembly.GetExecutingAssembly(); 
    var stream = assembly.GetManifestResourceStream(this.GetType(), "AppNameSpace.Products.xml"); 
    var xElem= new XmlDocument(); 
    xElem.Load(stream); 
    

2 xElem是不是應該是相同的?在Products.xml中包含相同信息的XmlDocument?

我做錯了什麼?謝謝。

如果我想獲得與場景1中相同的xElem,那我必須在場景2中做什麼?

+0

這兩個對象有什麼區別?他們應該加載完全相同的結構,除非你的文件不同。 – 2011-12-23 04:38:06

+0

@TomislavMarkovski這些文件完全一樣。這就是爲什麼我不知道什麼是錯的。 – user763554 2011-12-23 06:47:48

+0

您的項目結構中的「Products.xml」是什麼,您顯示的代碼在哪裏? 'GetExecutingAssembly'獲取執行代碼的dll - 如果xml文件位於不同的程序集中,則不會找到它。 – 2011-12-23 09:15:18

回答

2

將您的XML文件構建爲資源,即將文件添加到項目時,在「屬性」窗口中將「構建操作」設置爲「嵌入資源」。

請參見以下鏈接

檢查你的形象存在於資源與這一

thisExe = System.Reflection.Assembly.GetExecutingAssembly(); 
string [] resources = thisExe.GetManifestResourceNames(); 

編輯:好的,我剛纔檢查,你需要將「Build Action」設置爲「Embeded Resou」 RCE」。將其設置爲「資源」將不起作用。執行此操作,並使用上面的代碼檢查資源的名稱。我相信它會起作用。

+0

這就是我所做的,並找不到資源。肯定是我的錯誤,但我還沒有弄清楚在哪裏。 – user763554 2011-12-23 19:15:36

+0

檢查您的項目屬性中是否設置了其他名稱空間。與您訪問的內容不同的內容。 – 2011-12-25 12:03:02

+0

或者檢查項目中所有資源的名稱。查看我的回答編輯代碼和鏈接。 – 2011-12-25 12:10:42

2

「Products.xml」需要它之前的應用程序名稱空間。你檢查過流或XML數據是否爲空?

+0

這是我的錯誤之一。我不確定這是我的代碼中唯一的錯誤。我正在解決這個問題。謝謝。 – user763554 2011-12-23 05:16:43

+0

在文件名前添加應用程序名稱空間後,我仍然遇到問題。 stream在GetManifestResourceStream()後仍然爲空。 – user763554 2011-12-23 06:16:06

相關問題