【问题标题】:Parsing Resx file with C# crashes on relative paths使用 C# 解析 Resx 文件在相对路径上崩溃
【发布时间】:2013-02-27 19:38:21
【问题描述】:

出于不得不将 resx 数据复制到 word 以获取字数的巨大挫败感 我已经开始编写自己的工具来做到这一点。

这让我遇到了一个问题。 我在 Resources.resx 文件中有图标和类似的东西。 根据他们正在使用的项目,它们具有相对路径。

他们显然应该拥有的。

当我尝试在另一个应用程序中解析 Resx 文件以计算 Value 列中的单词时。

我收到错误,因为它们无法解析相对路径。他们最终会转到我的 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 例如。

有人知道怎么做吗?

【问题讨论】:

    标签: c# globalization


    【解决方案1】:

    好的。 所以解决方案比预期的要容易一些。

    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();           
    }
    

    如果您将这些属性/元素转换为 (String),您甚至可以允许使用空字符串

    希望这对某人有所帮助!

    【讨论】:

      【解决方案2】:

      尝试为此目的使用 ResXResourceReader - 请参阅 http://msdn.microsoft.com/en-us/library/czdde9sc.aspx

      【讨论】:

      • 虽然这可能会回答这个问题,但如果您可以编辑您的答案以总结文章中的要点/代码 sn-ps,那将非常有帮助,以防将来链接损坏.
      猜你喜欢
      • 1970-01-01
      • 2012-01-20
      • 2010-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-11
      相关资源
      最近更新 更多