我肯定在这里错过了一些小事。我正在尝试打开多个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);
}
}
答案 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;
}