阅读XML中的下一个节点(Linq to XML C#)

时间:2013-01-11 15:08:54

标签: c# xml linq-to-xml

我有一个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的了解还不够。只能为此提供解决方案吗?

2 个答案:

答案 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;
        }
}