首页 新闻 会员 周边

判断xml是否有根节点

0
[已解决问题] 解决于 2018-02-02 15:19

例如这个根节点

<?xml version="1.0" encoding="utf-8"?>(如何判断xml文件里是否有这个)

大da脸的主页 大da脸 | 初学一级 | 园豆:73
提问于:2018-02-02 08:34
< >
分享
最佳答案
0

你说的这个东西叫做XmlDeclaration ,中文的说法是XML声明,不是啥根节点。

 

if (xmldoc.FirstChild.NodeType == XmlNodeType.XmlDeclaration)

其中xmldoc是指你加载的XmlDocument

奖励园豆:5
西漠以西 | 小虾三级 |园豆:1675 | 2018-02-02 11:23

这是我现有的xml文件,第一行声明是存在的,但是调试的时候报错,获取不到

xmlFile.FirstChild.NodeType这句报错,提示:未将对象引用到实例,空值

大da脸 | 园豆:73 (初学一级) | 2018-02-02 15:04

这是这部分创建的代码部分

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);//保存
                }
                
            }

 

大da脸 | 园豆:73 (初学一级) | 2018-02-02 15:06

@落幕: 你这段代码是用于创建一个新的XML文档,XmlDocument xmlFile = new XmlDocument();这句执行后,xmlFile 什么都还没有,执行到mlFile.FirstChild.NodeType这句当然报错。

“未将对象引用到实例”是指 mlFile.FirstChild 没找到。执行 null.NodeType 时异常的。

 

我开始给你解释 的 if 条件判断 中,“其中xmldoc是指你加载的XmlDocument”,也就是说,磁盘上或者网络中有个现成的XML文档(如使用XmlDocument.Load("....")),你把它加载到内存中得到XmlDocument文档对象,你想知道它里面第一行是否为XML声明。

 

西漠以西 | 园豆:1675 (小虾三级) | 2018-02-02 15:18
其他回答(2)
0
ycyzharry | 园豆:25651 (高人七级) | 2018-02-02 08:55

额 怎么判断,哪个属性语法

支持(0) 反对(0) 大da脸 | 园豆:73 (初学一级) | 2018-02-02 09:04
0

你贴的那个根本就不是xml的什么根节点,那个只是一个xml的申明,告知encoding而已,根节点还在下面,比如

<root>

  <child attributeA='hello world'/>

</root>

你要判断你说的那句话只需要按文本形式读出来就完了

Daniel Cai | 园豆:10424 (专家六级) | 2018-02-02 10:21

所以说如何判断xml的申明一个完整的xml文件这个东西是必须有的

当没有的时候我就创建,所以我要判断它是否存在

支持(0) 反对(0) 大da脸 | 园豆:73 (初学一级) | 2018-02-02 11:02

@落幕: 所以要你用普通文本方式读取第一行判断下就完了啊

支持(0) 反对(0) Daniel Cai | 园豆:10424 (专家六级) | 2018-02-02 11:06
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册