2

我有一个这样设置的 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 文档中名称的顺序)显示在列表框控件中。

当在列表框中选择一个项目时,我想将项目的名称传递给一个方法,该方法将在 XML 文档中搜索<name>节点内的该值。一旦找到,我想找到下一个节点(即<value>节点)并将其值作为字符串返回。

我已经尝试了各种方法来获取这些信息,但显然我对 LINQ to XML 的了解还不够,无法完成这项工作。只能为此提供解决方案吗?

4

2 回答 2

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 查询将返回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();
于 2013-01-11T15:12:15.603 回答
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;
        }
}
于 2013-01-11T15:23:53.540 回答