我有一个XML文档(没有属性),设置如下:
<variables>
<variable>
<name>Name_Value</name>
<value>Value of Entry</value>
</variable>
<variable>
<name>Name_Value2</name>
<value>Value of Entry2</value>
</variable>
</variables>
我使用LINQ to XML来获取文档中所有<name>
值的列表。这些名称值按字母顺序显示在列表框控件中(不是 XML文档中名称的顺序)。
当在列表框中选择一个项目时,我想将项目的名称传递给一个方法,该方法将在<name>
节点内搜索XML文档中的该值。一旦找到,我想找到下一个节点(即<value>
节点)并将其值作为字符串返回。
我已经尝试了各种各样的东西来获取这些信息,但显然我对LINQ to XML的了解还不够。只能为此提供解决方案吗?
答案 0 :(得分:3)
XDocument xdoc = XDocument.Load(path_to_xml);
var query = from v in xdoc.Descendants("variable")
where (string)v.Element("name") == name
select (string)v.Element("value");
此Linq查询将返回与您的姓名匹配的{element}元素值IEnumerbale<string>
。如果您确定不应该有多个具有指定名称的变量
string value = query.SingleOrDefault();
或在单个查询中:
string value = xdoc.Descendants("variable")
.Where(v => (string)v.Element("name") == name)
.Select(v => (string)v.Element("value"))
.SingleOrDefault();
答案 1 :(得分:0)
我认为使用XPath的方法更容易阅读:
using System;
using System.Linq;
using System.Xml.Linq;
using System.Xml;
using System.Xml.XPath;
public class Test
{
public static void Main()
{
var xml = XElement.Parse(@"<variables>
<variable>
<name>Name_Value</name>
<value>Value of Entry</value>
</variable>
<variable>
<name>Name_Value2</name>
<value>Value of Entry2</value>
</variable>
</variables>");
Console.WriteLine(
GetVariableValue(xml, "Name_Value")
);
Console.WriteLine(
GetVariableValue(xml, "Name_Value2")
);
}
public static string GetVariableValue(XElement xml, string variableName)
{
return xml.XPathSelectElement("variables/variable[name='" + variableName + "']/value").Value;
}
}