【问题标题】:understanding of using linq to parse xml使用linq解析xml的理解
【发布时间】:2011-03-09 06:49:36
【问题描述】:

我这里有一些代码来澄清我对 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 文件中从“if”的值中选择一个字符串,如下面的 xml 文件所示:

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

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

对于“if”属性的“value”的每个选定字符串,我是否在 foreach 循环中做某事。

【问题讨论】:

  • 单步调试调试器,看看它告诉你什么。
  • 我添加了一个断点并检查了 abc 是什么。这就是他们所说的: {System.Linq.Enumerable.WhereSelectEnumerableIterator} 基础 {System.Linq.Enumerable.Iterator}: {System.Linq.Enumerable.WhereSelectEnumerableIterator} 我不确定它是否正确

标签: c# linq linq-to-xml


【解决方案1】:

是的,这是正确的。 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(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;

编辑 为了帮助您解决调试器问题: 我将鼠标移到 abc 上,我看到调试器弹出如下图所示的信息窗口

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

然后第二张图片会显示结果

【讨论】:

  • @jeremychan 我已经编辑了我的答案以包含一些我认为可能会帮助您了解为什么您没有看到变量 abc 中的值的图像(这是一个 IEumerable 或某种类型)跨度>
猜你喜欢
  • 2011-06-13
  • 1970-01-01
  • 2012-01-20
  • 2012-05-29
  • 1970-01-01
  • 2010-11-25
  • 2011-09-05
  • 2016-08-23
  • 1970-01-01
相关资源
最近更新 更多