例如这个根节点
<?xml version="1.0" encoding="utf-8"?>(如何判断xml文件里是否有这个)
你说的这个东西叫做XmlDeclaration ,中文的说法是XML声明,不是啥根节点。
if (xmldoc.FirstChild.NodeType == XmlNodeType.XmlDeclaration)
其中xmldoc是指你加载的XmlDocument
这是我现有的xml文件,第一行声明是存在的,但是调试的时候报错,获取不到
xmlFile.FirstChild.NodeType这句报错,提示:未将对象引用到实例,空值
这是这部分创建的代码部分
DataTable dt = new DataTable(); XmlDocument xmlFile = new XmlDocument();//xml主文件 XmlDeclaration xmldecl;//xml第一行声明 if (!Directory.Exists(filePath)) Directory.CreateDirectory(filePath); if (!File.Exists(fullPath)) File.Create(fullPath); else { //判断xml声明是否存在,如果不存在就写入 XmlNodeType nodetype = xmlFile.FirstChild.NodeType; if (xmlFile.FirstChild.NodeType == XmlNodeType.XmlDeclaration)//如果声明不存在 { xmldecl = xmlFile.CreateXmlDeclaration("1.0", "utf-8", null);//创建声明 XmlElement elementObj = xmlFile.DocumentElement; xmlFile.InsertBefore(xmldecl, elementObj);//将申明插入文件头部 XmlNodeList nodeItem = elementObj.GetElementsByTagName("Root"); if (nodeItem.Count <= 0)//如果Root不存在 { elementObj = xmlFile.CreateElement("Root");//创建Root xmlFile.AppendChild(elementObj); } xmlFile.Save(fullPath);//保存 } }
@落幕: 你这段代码是用于创建一个新的XML文档,XmlDocument xmlFile = new XmlDocument();这句执行后,xmlFile 什么都还没有,执行到mlFile.FirstChild.NodeType这句当然报错。
“未将对象引用到实例”是指 mlFile.FirstChild 没找到。执行 null.NodeType 时异常的。
我开始给你解释 的 if 条件判断 中,“其中xmldoc是指你加载的XmlDocument”,也就是说,磁盘上或者网络中有个现成的XML文档(如使用XmlDocument.Load("....")),你把它加载到内存中得到XmlDocument文档对象,你想知道它里面第一行是否为XML声明。
你贴的那个根本就不是xml的什么根节点,那个只是一个xml的申明,告知encoding而已,根节点还在下面,比如
<root>
<child attributeA='hello world'/>
</root>
你要判断你说的那句话只需要按文本形式读出来就完了
所以说如何判断xml的申明一个完整的xml文件这个东西是必须有的
当没有的时候我就创建,所以我要判断它是否存在
@落幕: 所以要你用普通文本方式读取第一行判断下就完了啊