C# 从XML读取,用于循环问题

C# 从XML读取,用于循环问题,c#,xml,xml-deserialization,C#,Xml,Xml Deserialization,下面的代码从XML中读取,但循环将在另一时间运行,并打印空值。 Im在根ax内搜索,以显示属性值增量,第一次显示正确的值,但也会运行另一次并显示空字符串 XML: 第一次显示正确的值2时,它也会再次运行并显示null!它应该运行一次,因为我已经清楚地提到了SelectNode//ax。弄明白了,我应该检查它是否具有该属性 if (element1.HasAttribute("increment")) {

下面的代码从XML中读取,但循环将在另一时间运行,并打印空值。 Im在根ax内搜索,以显示属性值增量,第一次显示正确的值,但也会运行另一次并显示空字符串

XML:
第一次显示正确的值2时,它也会再次运行并显示null!它应该运行一次,因为我已经清楚地提到了SelectNode//ax。

弄明白了,我应该检查它是否具有该属性

     if (element1.HasAttribute("increment"))
                    {
                        string incrementBy = element1.GetAttribute("increment");
                        MessageBox.Show(incrementBy);

                    }

可以使用Linq解析此xml,前提是不存在具有增量属性的子元素:

XDocument xdoc = XDocument.Load("config.xml");
var element = xdoc.Root.XPathSelectElement("ax/*[@increment]");
if (element != null)
{
   int increment = (int)element.Attribute("increment");
   // ...
}
或者不使用XPath:

var element = xdoc.Root.Elements("ax").Elements()                      
                  .FirstOrDefault(e => e.Attribute("increment") != null);
如果要获取所有增量值,可以使用LINQ to XML执行以下操作


因为并没有第二个元素包含increment属性?你们到底想从配置中得到什么?从ax元素的第一个子元素递增属性值?是否可能有几个子级具有增量属性?@SergeyBerezovskiyyes@meWantToLearn抱歉,又添加了一个问题,Position和Config都是ax元素的子元素。因此foreach循环的第二次迭代是由于config元素。
XDocument xdoc = XDocument.Load("config.xml");
var element = xdoc.Root.XPathSelectElement("ax/*[@increment]");
if (element != null)
{
   int increment = (int)element.Attribute("increment");
   // ...
}
var element = xdoc.Root.Elements("ax").Elements()                      
                  .FirstOrDefault(e => e.Attribute("increment") != null);
var increments = XDocument.Load("config.xml")
                 .Descendants()
                 .Where(x => x.Attribute("increment") != null)
                 .Select(x=> (string)x.Attribute("increment"));