2013-02-27 80 views
2

出於必須將resx數據複製到單詞中以獲取單詞數量的絕望的挫敗感 我已經開始編寫自己的工具來執行此操作。使用C#解析Resx文件在相對路徑上崩潰

那麼,這讓我碰到一個問題。 我在Resources.resx文件中有圖標和這些東西。 並且它們根據它們正在使用的項目int具有相對路徑。

他們應該明白的。

那麼,當我嘗試解析另一個應用程序中的Resx文件來計算值列中的單詞。

我收到錯誤,因爲他們無法解析相對路徑。他們最終會去我的wordcount應用程序中不存在的文件夾。

您是否有任何想法如何在解析這些值時讓我的應用程序陷入正確的文件夾中?

我不太確定它爲什麼要解析這些值開始。 它應該抓住我所關心的字符串。

我使用ResXReader

ResXResourceReader reader = new ResXResourceReader(filename); 
foreach(System.Collections.DictionaryEntry de in reader) 
{ 
    if (((string)de.Key).EndsWith(".Text")) 
    { 
     System.Diagnostics.Debug.WriteLine(string.Format("{0}: {1}", de.Key, de.Value)); 
    } 
} 

我發現這個在這裏:Word Count of .resx files

它的錯誤出在的foreach。例如 .. \ common \ app.ico。

任何人有一個想法如何做到這一點?

回答

2

好的。 所以解決方案比預期的要容易一些。

  1. 我正在使用過時的類。 我應該一直使用XDocument代替XmlDataDocument

其次LINQ是炸彈。

所有我需要做的是這樣的:

try 
{ 
    XDocument xDoc = XDocument.Load(resxFile); 

    var result = from item in xDoc.Descendants("data") 
    select new 
    { 
     Name = item.Attribute("name").Value, 
     Value = item.Element("value").Value 
    }; 

    resxGrid.DataSource = result.ToArray();   
} 

,你甚至可以允許空字符串,如果你投的那些屬性/元素(字符串)

希望這可以幫助別人!

-1

嘗試使用ResXResourceReader用於此目的 - 看http://msdn.microsoft.com/en-us/library/czdde9sc.aspx

+2

雖然這可以回答這個問題,這將是超級有益的,如果你可以編輯你的答案總結從文章的要點/代碼片段,萬一該鏈接將來會被打破。 – 2014-03-29 08:05:31