读取LINQ和XDocument的结果
本文关键字:结果 XDocument LINQ 读取 | 更新日期: 2023-09-27 18:18:39
我试图解析一个visual studio资源文件,其中包含各种翻译字符串,如:
<data name="InvalidGroupType" xml:space="preserve">
<value>La sélection du type de groupe n'est pas valide.</value>
</data>
<data name="ProgressFailure" xml:space="preserve">
<value>Liste des échecs</value>
</data>
<data name="Loronix" xml:space="preserve">
<value>Loronix</value>
</data>
<data name="InputString" xml:space="preserve">
<value>Entrée</value>
</data>
还有其他东西。我只想要数据名称和值字符串。
我尝试使用以下命令逐行解析该文件:
StreamReader fileMain = new StreamReader(MainFile);
while ((line = fileMain.ReadLine()) != null)
{
string data = checkForData(line); --checks each line for "<data name="
if( data.Length > 0)
StringsToTranslatelist.Add(data);
}
但我猜一定有更好的方法来做到这一点。所以我使用了这样的LINQ:
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
};
foreach (var entry in result)
{
string name = entry.Name;
string value = entry.Value;
//Do somethign here
}
问题是,当我到达foreach循环时,我得到一个异常或:"类型为'System '的未处理异常。在MyProgram.exe中发生了NullReferenceException。对象引用未设置为对象"
有人知道为什么吗?我是否正确使用LINQ
看起来有些data
元素没有name
属性或value
元素。为了避免这种情况,请使用强制转换而不是访问Value
属性。否则,如果没有找到name
属性或value
元素,您将收到NullReferenceException
var result = from item in xDoc.Descendants("data")
select new {
Name = (string)item.Attribute("name"),
Value = (string)item.Element("value")
};
另一个可能的原因是命名空间问题。但是默认的资源文件没有定义命名空间。