Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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# 理解使用linq解析xml_C#_Linq_Linq To Xml - Fatal编程技术网

C# 理解使用linq解析xml

C# 理解使用linq解析xml,c#,linq,linq-to-xml,C#,Linq,Linq To Xml,我这里有一些代码来澄清我对LINQXML解析的疑问。我有以下资料: ... { XDocument xmlDoc = XDocument.Load(@"C:\Build.xml"); var abc = from example in xmlDoc.Descendants("target") select (string)target.Attribute("if"); ...

我这里有一些代码来澄清我对LINQXML解析的疑问。我有以下资料:

...
{

            XDocument xmlDoc = XDocument.Load(@"C:\Build.xml");
            var abc = from example in xmlDoc.Descendants("target")
                      select (string)target.Attribute("if");
            ...
            foreach(string example in abc)
           {
            ...
           }

            ...
           }
我可以问一下,在
行中选择(字符串)target.Attribute(“if”)
我正在从xml文件中选择一个字符串,其值为“if”,如下所示:

<xml>
<target if="thevalue">
</target>
</xml>

那么我有一句话:
foreach(abc中的字符串示例)


对于“if”属性的“value”的每个选定字符串,我都在foreach循环中执行某些操作。是的,这是正确的。foreach循环中的变量“example”将包含“if”属性的值

  var abc = from target in xDocument.Descendants("target")
            select (string)target.Attribute("if");

  foreach (var example in abc)
  {
    Console.WriteLine(example);
  }
在控制台应用程序中尝试上述代码,您将在控制台窗口中看到这些值。也可以在不同类型的应用程序中使用Debug.WriteLine(示例)

然而,这是一个更好的linq查询表达式

  var abc = from target in xDocument.Descendants("target").Attributes("if")
            select target.Value;
或者将linq查询表达式更改为

  var abc = from target in xDocument.Descendants("target")
            select target.Attribute("if").Value;
编辑 要帮助解决调试器的问题,请执行以下操作: 我将鼠标移到abc上,我看到调试器弹出信息窗口,如下图所示

第一个图像显示“结果视图”中有绿色箭头。您需要单击这些箭头才能看到结果(如旁边的消息所示)

然后,第二个图像显示结果
是的,这是正确的。foreach循环中的变量“example”将包含“if”属性的值

  var abc = from target in xDocument.Descendants("target")
            select (string)target.Attribute("if");

  foreach (var example in abc)
  {
    Console.WriteLine(example);
  }
在控制台应用程序中尝试上述代码,您将在控制台窗口中看到这些值。也可以在不同类型的应用程序中使用Debug.WriteLine(示例)

然而,这是一个更好的linq查询表达式

  var abc = from target in xDocument.Descendants("target").Attributes("if")
            select target.Value;
或者将linq查询表达式更改为

  var abc = from target in xDocument.Descendants("target")
            select target.Attribute("if").Value;
编辑 要帮助解决调试器的问题,请执行以下操作: 我将鼠标移到abc上,我看到调试器弹出信息窗口,如下图所示

第一个图像显示“结果视图”中有绿色箭头。您需要单击这些箭头才能看到结果(如旁边的消息所示)

然后,第二个图像显示结果

逐步完成调试器,看看它能告诉您什么。我添加了一个断点,并检查了abc是什么。他们说:{System.Linq.Enumerable.WhereSelectEnumerableTerator}base{System.Linq.Enumerable.Iterator}:{System.Linq.Enumerable.WhereSelectEnumerableTerator}我不确定它是否正确,请逐步通过调试器,看看它告诉您什么。我添加了一个断点,并检查了abc是什么。这就是他们说的:{System.Linq.Enumerable.WhereSelectEnumerableIterator}base{System.Linq.Enumerable.Iterator}:{System.Linq.Enumerable.WhereSelectEnumerableIterator}我不知道是不是correct@jeremychan我已经编辑了我的答案,其中包括一些图片,我认为这些图片可能会帮助您了解为什么您没有看到变量abc(它是一个IEnumerable或某种类型)中的值@jeremychan我编辑了我的答案,包括一些图片,我认为这些图片可能有助于解释为什么你看不到变量abc中的值(它是一个IEnumerable或某种类型)