如何检查对象是否已实例化?

时间:2012-06-15 05:27:46

标签: c# xml winforms .net-2.0

我正在尝试将xml的所有元素和属性列入两个单独的List对象。

我能够获得xml中的所有元素 但是当我尝试添加功能以获取每个元素中的所有属性时,我总是会遇到System.NullReferenceException: Object reference not set to an instance of an object.

enter image description here 请查看下面的代码,并告诉我我做得不对的地方。或者有更好的方法来实现这一目标吗?您的意见和建议将受到高度赞赏。

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using System.Xml;
using System.IO;

namespace TestGetElementsAndAttributes
{
    public partial class MainForm : Form
    {
        List<string> _elementsCollection = new List<string>();
        List<string> _attributeCollection = new List<string>();

        public MainForm()
        {
            InitializeComponent();

            XmlDataDocument xmldoc = new XmlDataDocument();
            FileStream fs = new FileStream(@"C:\Test.xml", FileMode.Open, FileAccess.Read);
            xmldoc.Load(fs);

            XmlNode xmlnode = xmldoc.ChildNodes[1];

            AddNode(xmlnode);
        }

        private void AddNode(XmlNode inXmlNode)
        {
            try
            {
                if(inXmlNode.HasChildNodes)
                {
                    foreach (XmlNode childNode in inXmlNode.ChildNodes)
                    {
                        foreach(XmlAttribute attrib in childNode.Attributes)
                        {
                            _attributeCollection.Add(attrib.Name);
                        }

                        AddNode(childNode);
                    }
                }
                else
                {
                    _elementsCollection.Add(inXmlNode.ParentNode.Name);
                }
            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.GetBaseException().ToString());
            }
        }
    }
}

发布样本XML。

<?xml version="1.0" encoding="UTF-8" ?> 
<DocumentName1>
    <Product>
        <Material_Number>21004903</Material_Number> 
        <Description lang="EN">LYNX GIFT MUSIC 2012 1X3 UNITS</Description> 
        <Packaging_Material type="25">457</Packaging_Material> 
    </Product>
</DocumentName1>

2 个答案:

答案 0 :(得分:3)

您应该使用以下内容检查childNode.Attributes是否存在:

if (childNode.Attributes != null)
{
   foreach(XmlAttribute attrib in childNode.Attributes)
   {
    ...
   }
}

答案 1 :(得分:0)

您需要确保childNode.Attributes具有值,因此请先添加if语句

if (childNode.Attributes != null)
{
    foreach(XmlAttribute attrib in childNode.Attributes)