几个相同的节点名称到字符串列表

时间:2013-10-09 09:42:54

标签: c# .net xml linq-to-xml

我有一个XML文件。

我尝试了这个查询。但当我得到节点“Val1”时,我喜欢当我想要一个值为“AAA”和“BBB”的List时

一个想法?

var res = doc.Descendants("Tags")
.Where(p => p.Elements("code")
.Any(c => (string)c.Parent.Attribute("id") == "Val1"))
.Select(i => i.ToString()).ToArray().First();

<?xml version="1.0" encoding="utf-8" ?>
<MyTag>
  <Tags id="Val1">
    <code>AAA</code>
    <code>BBB</code>
  </Tags>
  <Tags id="Val2">
    <code>CCC</code>
    <code>DDD</code>
    <code>EEE</code>
  </Tags> 
</MyTag>

1 个答案:

答案 0 :(得分:0)

您需要:

var res = doc.Descendants("Tags")
.Where(p => p.Elements("code")
.Any(c => (string)c.Parent.Attribute("id") == "Val1"))
.Select(i => i.Elements("code")).ToArray().First();

或者这个:

var res = doc.Descendants("Tags")
.Where(p => p.Elements("code")
.Any(c => (string)c.Parent.Attribute("id") == "Val1"))
.Select(i => i.Elements("code").Select (x => (string)x.Value)).ToArray().First();

第一个会为您提供一系列元素,例如<code>AAAA</code>,而第二个会为您提供一系列字符串,例如AAAA