resxResourceReader仅在xml:space存在时读取

时间:2014-07-15 19:36:48

标签: c# xml resx

我肯定在这里错过了一些小事。我正在尝试打开多个resx文件,将它们加载到字典中,然后交叉引用翻译文件。问题是当我用resxResourceReader打开resx文件时,它也会读入所有表单设置数据。 I.E.容器信息,控制名称等。

现在我在resx文件中注意到我想要的条目和它们一起有“xml:space”。只获得我想要的字符串的正确方法是什么,并留下所有其他东西?

谢谢!

            foreach (String s in sourceLocations)
        {
            Dictionary<string, string> sourceTemp = new Dictionary<string, string>();
            Dictionary<string, object> Temp = new Dictionary<string, object>();
            using (ResXResourceReader rsxr = new ResXResourceReader(s))
            {
                foreach (DictionaryEntry entry in rsxr)
                {
                    string[] parts = s.Split('\\');
                    if (!entry.Key.ToString().Contains(">>"))
                    {
                        sourceTemp.Add(parts[parts.Count() - 1] + "_" + entry.Key.ToString(), entry.Value.ToString());
                    }
                }
                sources.Add(sourceTemp);
            }
        }

1 个答案:

答案 0 :(得分:0)

对于后来遇到这种情况的人来说,这最终会起作用:

        foreach (String s in sourceLocations)
        {
            Dictionary<string, string> sourceTemp = new Dictionary<string, string>();
            Dictionary<string, object> Temp = new Dictionary<string, object>();
            using (ResXResourceReader rsxr = new ResXResourceReader(s))
            {
                rsxr.UseResXDataNodes = true;
                foreach (DictionaryEntry entry in rsxr)
                {
                    string[] parts = s.Split('\\');
                    if ((!entry.Key.ToString().Contains(">>")))
                    {
                        if (isNodeString((ResXDataNode)entry.Value))
                        sourceTemp.Add(parts[parts.Count() - 1] + "_" + entry.Key.ToString(), getNodeValue((ResXDataNode)entry.Value));
                    }
                }
                sources.Add(sourceTemp);
            }
        }


    private string getNodeValue(ResXDataNode node)
    {
        if (node.FileRef == null)
        {
            return node.GetValue((ITypeResolutionService)null).ToString();
        }
        else return String.Empty;
    }

    private bool isNodeString(ResXDataNode node)
    {
        string result =  node.GetValueTypeName((ITypeResolutionService)null);
        if (result.Contains("System.String")) return true;
        else return false;
    }