Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 基于XML的Linq查询以选择子节点的多个元素_C#_Xml_Linq - Fatal编程技术网

C# 基于XML的Linq查询以选择子节点的多个元素

C# 基于XML的Linq查询以选择子节点的多个元素,c#,xml,linq,C#,Xml,Linq,我想从下面的xml中选择child的所有不同值 <root> <parent> <child>value 1</child> <child>value 2</child> </parent> <parent> <child>value 1</child> <child>value 4</child> <

我想从下面的xml中选择child的所有不同值

<root>
  <parent>
    <child>value 1</child>
    <child>value 2</child>
  </parent>
  <parent>
    <child>value 1</child>
    <child>value 4</child>
  </parent>
</root>
但无法从中获取值,将值包装在标记中,且不区分


是否可以显示两种获取方法-查询和链接aka lambda。

是的,两种方法都可以

var doc = new XDocument("your xml string");
var values = (from c in doc.Root.Descendants("child") select c.Value).Distinct();
//链式

var values = doc.Root.Descendants("child").Select(c=>c.Value).Distinct();

是的,两种方法都有可能

var doc = new XDocument("your xml string");
var values = (from c in doc.Root.Descendants("child") select c.Value).Distinct();
//链式

var values = doc.Root.Descendants("child").Select(c=>c.Value).Distinct();

您正在选择元素,并且元素都是不同的。您需要获得不同的值。例如:

var values = XmlResources.Element("root")
                         .Elements("parent")
                         .Elements("child")
                         .Select(x => x.Value)
                         .Distinct();
在这里使用查询表达式真的没有什么好处——它只会增加粗糙度。我仅在查询具有多个方面(例如where和有意义的select或join)时使用查询表达式。仅仅是一个选择,或者只是一个毫无意义的地方。因此,您可以使用:

var values = (from x in XmlResources.Element("root")
                                    .Elements("parent")
                                    .Elements("child")
              select x.Value).Distinct();
var values = XmlResources.Descendants("child")
                         .Select(x => x.Value)
                         .Distinct();
。。。但你为什么要这么做?在国际海事组织看来,这不太清楚

请注意,如果您不太关心根/父/子层次结构,并且很乐意只获取所有的
子体,则可以使用:

var values = (from x in XmlResources.Element("root")
                                    .Elements("parent")
                                    .Elements("child")
              select x.Value).Distinct();
var values = XmlResources.Descendants("child")
                         .Select(x => x.Value)
                         .Distinct();

您正在选择元素,并且元素都是不同的。您需要获得不同的值。例如:

var values = XmlResources.Element("root")
                         .Elements("parent")
                         .Elements("child")
                         .Select(x => x.Value)
                         .Distinct();
在这里使用查询表达式真的没有什么好处——它只会增加粗糙度。我仅在查询具有多个方面(例如where和有意义的select或join)时使用查询表达式。仅仅是一个选择,或者只是一个毫无意义的地方。因此,您可以使用:

var values = (from x in XmlResources.Element("root")
                                    .Elements("parent")
                                    .Elements("child")
              select x.Value).Distinct();
var values = XmlResources.Descendants("child")
                         .Select(x => x.Value)
                         .Distinct();
。。。但你为什么要这么做?在国际海事组织看来,这不太清楚

请注意,如果您不太关心根/父/子层次结构,并且很乐意只获取所有的
子体,则可以使用:

var values = (from x in XmlResources.Element("root")
                                    .Elements("parent")
                                    .Elements("child")
              select x.Value).Distinct();
var values = XmlResources.Descendants("child")
                         .Select(x => x.Value)
                         .Distinct();

太棒了,谢谢!我没有意识到我可以直接转到child,而是试图通过元素(“根”)链接到它。元素(“父”)为什么要使用语句体lambda,而仅仅
。选择(c=>c.Value)
会更简单?另外请注意,它是
Select
,而不是
Select
(我已经将
Select
编辑为
Select
,并且还修复了
子体的名称和字符串文本……我想你不会介意。我暂时将lambda表达式保留在笨拙的语法中,以防你真的需要它。)太棒了,谢谢!我没有意识到我可以直接转到child,而是试图通过元素(“根”)链接到它。元素(“父”)为什么要使用语句体lambda,而仅仅
。选择(c=>c.Value)
会更简单?另外请注意,它是
Select
,而不是
Select
(我已经将
Select
编辑为
Select
,并且还修复了
子体的名称和字符串文本……我想你不会介意。我暂时将lambda表达式保留在笨拙的语法中,以防你真的需要它。)谢谢,我会考虑到这一点,只是想学习用查询方式做事。@SergejPopov:学习用适合上下文的方式做事-不要强迫自己在查询表达式对你没有帮助时使用它。这就像当你可以直接调用某个东西时,强迫自己使用反射……谢谢,我们会考虑到这一点,只是想学习以查询的方式做事。@SergejPopov:学习以适合上下文的方式做事-当查询表达式对你没有帮助时,不要强迫自己使用它。这就像当你可以直接调用某些东西时,强迫自己使用反射。。。