【问题标题】:Foreach loop will not read XMLForeach 循环不会读取 XML
【发布时间】:2014-12-02 18:25:41
【问题描述】:

我正在尝试从 XML 中读取一些数据。我在另一个具有几乎相同 XML 布局的应用程序中使用相同的代码,这似乎可以工作.. 但我无法使用此代码在 foreach 循环中运行任何代码:

如果If有断点并查看_xml.Elements,似乎可以读取XML

 XElement value in _xml.Elements("effects").Elements("effect")

C#

 XElement _xml = XElement.Load("Effects.xml");
                {
                    foreach (XElement value in _xml.Elements("effects").Elements("effect"))
                    {
                       //will not execute any code in here.
                        DVOXML _item = new DVOXML();
                        _item.Name = value.Element("name").Value;
                        _item.Param = value.Element("params").Value;


                    }
                }

XML:

  <?xml version="1.0" ?>
 <effects>
   <effect>
    <name>effect1</name>
    <params>xmldata</params>
  </effect>
  <effect>
    <name>effect2</name>
    <params>xmldata</params>
  </effect>
</effects>

【问题讨论】:

  • 只是为了检查 - 您确定 value 包含 XML 并已加载,对吗?您应该能够通过它进行调试并通过将鼠标悬停在其上轻松检查。
  • 我认为您的问题可能是您没有查看根目录 - 请尝试 _xml.Root.Elements("effect") 并让我知道这是否有效。它可能没有执行任何代码,因为您从 LINQ-XML 查询中返回了 0 个项目。
  • @Phoenixblade9 值确实为空。并且没有_xml.Root扩展方法
  • 抱歉,我习惯使用 XDocument 而不是 XElement - 让我为你准备一些东西。

标签: c# xml .net-4.5 xelement


【解决方案1】:

在你的情况下,效果是根。

使用这个:

foreach (XElement value in _xml.Elements("effect"))
{
  .....
}

【讨论】:

    【解决方案2】:

    您不需要在查询中包含“效果” - 这已经是根。只需将其用作您的查询:

    foreach (XElement value in _xml.Elements("effect"))
    

    这是一个 fiddle 证明它有效。

    【讨论】:

    • :) 确实如此。我会尽可能在我的答案中包含一个 .NET Fiddle,这通常意味着我晚了一点,哦,好吧
    • Hold one.. 如果我从 xml.parse 文本中读取它可以工作,但如果我从具有相同文本的文件加载它就不会工作: XElement _xml = XElement.Load("Effects.xml ");
    • @DanSewell 您的 xml 文件需要与程序集位于同一位置才能正常工作。否则你需要一个绝对路径。 C:/myfile.xml 或类似的东西
    • 好的,整理好了。 VS 似乎正在查看与我告诉它的不同的 XML 文件。奇怪的。删除的东西,然后重新添加,它的工作。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-18
    相关资源
    最近更新 更多