我正在尝试获取xml的子节点。我的父节点中有一个名为“id”的属性。这是xml内容:
<?xml version="1.0"?>
<languages>
<item id="button_back">
<turkish>geri</turkish>
<english>back</english>
</item>
<item id="button_install">
<turkish>seçilileri kur</turkish>
<english>install selected</english>
</item>
</languages>
说我想获得土耳其标签的价值。我怎样才能做到这一点?这是我试过的:
using (XmlReader xr = XmlReader.Create(@"languages.xml"))
{
XDocument xdoc = XDocument.Load(xr);
var query = from t in xdoc.Descendants("item")
where t.Element("id").Value.ToLower() == "button_back" // Edit
select new
{
ID = t.Attribute("id").Value,
Turkish = t.Element("turkish").Value
};
foreach (var it in query)
{
MessageBox.Show(it.Turkish);
}
}
编辑:此代码为MessageBox提供了 xr 行的空引用异常。
答案 0 :(得分:0)
您在那里获得NullReferenceException
,因为您认为Element("id")
不为空。它会,因为你没有id元素。您需要使用Attribute("id")
。
答案 1 :(得分:0)
我喜欢用xml linq和字典
来做这件事using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication1
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
XDocument doc = XDocument.Load(FILENAME);
Dictionary<string, string> dict = doc.Descendants("item")
.GroupBy(x => (string)x.Attribute("id"), y => (string)y.Element("turkish"))
.ToDictionary(x => x.Key, y => y.FirstOrDefault());
}
}
}