我有以下格式的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();
但这给了我整个标签。
如何获得我想要的结果?
答案 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"];