2011-03-09 79 views
0

我只是在这里有一些代码来澄清我对linq xml解析的疑惑。我有以下几点:了解使用linq解析xml

... 
{ 

      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) 
      { 
      ... 
      } 

      ... 
      } 

我可以问,如果这是真的,在该行select (string)target.Attribute("if") 我从价值选择从XML文件中的字符串“如果”如下面的XML文件中所示:

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

然后我有这样一行: foreach(string example in abc)

这是真的,对于“价值”的每一个选择的字符串“如果”属性,我做的foreach循环的东西。

+0

步骤通过调试,看看它会告诉你。 – BoltClock 2011-03-09 06:52:11

+0

我添加了一个断点并检查了abc是什么。这就是他们所说的:{System.Linq.Enumerable.WhereSelectEnumerableIterator } base {System.Linq.Enumerable.Iterator }:{System.Linq.Enumerable.WhereSelectEnumerableIterator }我不确定它是否正确 – jeremychan 2011-03-09 06:59:30

回答

3

是的,这是正确的。 foreach循环中的变量“example”将包含“if”属性的值。

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

    foreach (var example in abc) 
    { 
    Console.WriteLine(example); 
    } 

在控制台应用程序中尝试上述代码,您将看到控制台窗口中的值。或者你可以在不同类型的应用

这是一个更好的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; 

的使用的Debug.WriteLine(例如)编辑 为了帮助您解决调试器的问题: 我把鼠标移到了abc上,我看到调试器弹出信息窗口,如下图所示

enter image description here

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

然后第二个图像显示你的结果 enter image description here

+0

+1 Nice调试器示例+截图。 – BoltClock 2011-03-09 07:37:32

+0

@jeremychan我编辑了我的答案,包括一些图像,我认为可能会帮助你为什么你没有看到变量abc(这是一个IEumerable或某种)的值, – 2011-03-09 07:37:42