2

我有以下格式的 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();

但这给了我整个标签。

我怎样才能得到我想要的结果?

4

2 回答 2

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而不需要它,namespaceToString()它将为您提供完全限定的名称。


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

xdoc.Descendants("DBdestination")
    .Elements()
    .Select(e => new
    {
        Name = e.Name,
        Value = e.Value
    })
    .ToList()
于 2013-10-30T12:20:05.923 回答
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"];
于 2013-10-30T12:32:03.963 回答