2013-02-27 53 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