如何检查xml兄弟姐妹是否具有属性?

时间:2014-08-12 07:48:10

标签: c# xml siblings

如果我删除了一个属性,我的程序会做一些奇怪的事情,因为它无法处理没有属性的兄弟姐妹。现在我用谷歌搜索了一段时间,但我找不到检查属性的好方法。

您喜欢检查属性的方式是什么?

while (FXMLNode != null)
{
     if (FXMLNode.Name.ToLower() == "datei")
     {
           xmlInformationen oInfo = new xmlInformationen();
           oInfo.Dateipfad = FXMLNode.InnerText;

           if (FXMLNode.Attributes["checked"].Value.ToString() == "true")
                oInfo.CheckBox = true;
           else if (FXMLNode.Attributes["checked"].Value.ToString() == "false")
                oInfo.CheckBox = false;
           else if(FXMLNode == null)
                oInfo.CheckBox = true;
           else
                oInfo.CheckBox = true;

           lstAttribute.Add(oInfo);
           iCounter++;

           if (FXMLNode.NextSibling == null)
           {
                FXMLNode = FXMLNode.FirstChild;
           }
           else
           {
                FXMLNode = FXMLNode.NextSibling;
           }
      }
      else
      {
           if (FXMLNode.NextSibling == null)
           {
                FXMLNode = FXMLNode.FirstChild;
           }
           else
           {
                FXMLNode = FXMLNode.NextSibling;
           }
      }
}

2 个答案:

答案 0 :(得分:1)

您正在访问属性的值,而不知道该属性是否存在。重写代码以首先检查属性:

oInfo.CheckBox = true;
if(FXMLNode == null) oInfo.CheckBox = true; //not sure why you set it to true here
else if (FXMLNode.HasAttribute("checked"))
{
     if (FXMLNode.Attributes["checked"].Value.ToString() == "true")
            oInfo.CheckBox = true;
     else if (FXMLNode.Attributes["checked"].Value.ToString() == "false")
            oInfo.CheckBox = false;
}

请注意,检查Xml元素是否为null应该是您要做的第一件事。如果它是null那么它肯定没有任何属性,但你会有例外。

答案 1 :(得分:0)

你可以像这样检查属性是否为空

if (FXMLNode.Attributes["checked"]!=null)

然后检查值