获取ChildNode名称及其值

时间:2013-10-30 12:17:10

标签: c# xml xml-parsing

我有以下格式的XML

<DBdestination>
    <val1>ANI</val1>
    <val2>DNIS</val2>
    <val3>Date</val3>
    <val4>Time</val4>
    <val5>ConnId</val5>
    <val6>UUID</val6>
    <val7>EmployeeId</val7>
    <val8>AgentDN</val8> 
</DBdestination>  

我需要获取DBdestination的孩子的姓名及其在列表中的值(或类似内容)val1,val2,val3,val4.....以及其他列表ANI,DNIS......

我试过

var xdoc = XDocument.Load("C:/Users/xxx/Desktop/RCCM_TOOL/configRCCM.xml");
var units = xdoc.Descendants("DBdestination").Elements().ToArray();

但这给了我整个标签。

如何获得我想要的结果?

2 个答案:

答案 0 :(得分:1)

你非常接近:

xdoc.Descendants("DBdestination")
    .Elements()
    .Select(e => Tuple.Create(e.Name.ToString(), e.Value))
    .ToList()

那会给你一个List<Tuple<string, string>>

另一种选择是:

...
    .Select(e => Tuple.Create(e.Name, e.Value))
    .ToList()

这会给你一个List<Tuple<XName, string>>。关于这一点的好处是XName可以与名称val1进行比较而不需要namespace,而ToString()将为您提供完全限定的名称。


满足支持.NET 3.5的需求;让我们这样做:

xdoc.Descendants("DBdestination")
    .Elements()
    .Select(e => new
    {
        Name = e.Name,
        Value = e.Value
    })
    .ToList()

答案 1 :(得分:1)

var xdoc = XDocument.Load("C:/Users/xxx/Desktop/RCCM_TOOL/configRCCM.xml");
            var units = xdoc.Descendants("DBdestination").Elements();
            var tagnames = units.Select(u => u.Name.LocalName).ToArray();
            var values = units.Select(u => u.Value).ToArray();

如果您希望按元素名称访问值,可以使用字典,如下所示:

        var xdoc = XDocument.Load("C:/Users/xxx/Desktop/RCCM_TOOL/configRCCM.xml");
        var units = xdoc.Descendants("DBdestination").Elements();
        var dictionary = new Dictionary<string, string>();
        foreach (var u in units)
        {
            dictionary.Add(u.Name.LocalName, u.Value);
        }

此后,您可以访问字典中的值,如下所示:

string value1=dictionary["val1"];