我正在尝试将xml的所有元素和属性列入两个单独的List对象。
我能够获得xml中的所有元素
但是当我尝试添加功能以获取每个元素中的所有属性时,我总是会遇到System.NullReferenceException: Object reference not set to an instance of an object.
请查看下面的代码,并告诉我我做得不对的地方。或者有更好的方法来实现这一目标吗?您的意见和建议将受到高度赞赏。
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>
答案 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)