从XML读取,用于循环问题

时间:2014-02-09 19:29:33

标签: c# xml xml-deserialization

下面的代码从XML读取,但循环运行另一次打印空值。 我在根轴内搜索,显示属性值增量,第一次显示正确的值,但它也运行另一次并显示空字符串

XML:

<?xml version="1.0" encoding="utf-8"?>
<config>
  <ax>
    <position start="23" increment="2" />
    <config server="127.0.0.1" location="er" />
  </ax>
  <pl>
    <position start="98" y="0.0"  />
    <config server="60" system="pop" />
  </pl>
</config>

代码:

XmlDocument document = new XmlDocument();
document.Load("config.xml");

foreach (XmlElement element in document.SelectNodes("//ax"))
{
    foreach (XmlElement element1 in element)
    {
        string incrementBy = element1.GetAttribute("increment");
        MessageBox.Show(incrementBy);
    }
}

第一次显示正确的值2,它第二次运行并显示为空!它应该运行一次,因为我已经明确提到SelectNode("//ax")

3 个答案:

答案 0 :(得分:0)

想通了,我应该检查它是否具有属性

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

                    }

答案 1 :(得分:0)

你可以用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);

答案 2 :(得分:0)

如果您想获得所有increment值,可以使用LINQ to XML

执行以下操作
var increments = XDocument.Load("config.xml")
                 .Descendants()
                 .Where(x => x.Attribute("increment") != null)
                 .Select(x=> (string)x.Attribute("increment"));