[英]Get child node using self id
我正在尝试获取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
行的空引用异常。
您在那里获得了NullReferenceException
,因为您假设Element("id")
不为null。 将会的,因为您没有id元素。 您需要使用Attribute("id")
。
我喜欢将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());
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.