鸿蒙OS开发-(用xml写查询语句+xml使用)

XML(可扩展标记语言)

在C#中我们常用来当做一个小型的数据库来使用,我们可以将信息保存在XML文档中,或者从XML文档中获取数据。这样就必须使用到XML文档的数据读取。

XML文档的读取有两种方式:

一、利用XMLReader逐条读取,通过判断XML的NodeType属性来获取到XML文档中信息。

示例:设置可以读取xml的dtd内容

复制代码
XmlReaderSettings xs=new XmlReaderSettings();
            xs.DtdProcessing=DtdProcessing.Parse;
            //用xmlreader对象读取
            XmlReader xml = XmlReader.Create("../../Student.xml",xs);
          // bool b= xml.Read();//只进流的方式读取节点
          //string n= xml.Name;//读取的节点的名称
          //MessageBox.Show(n);
            while (xml.Read())
            {
                string msg = "";
                switch (xml.NodeType)
                {
                    case XmlNodeType.Attribute:
                        msg = "属性:" + xml.Name;
                        break;
                    case XmlNodeType.CDATA:
                        msg = "CDATA节点:" + xml.Value;
                        break;
                    case XmlNodeType.Comment:
                        msg = "注释:" + xml.Value;
                        break;
                    case XmlNodeType.DocumentType:
                        msg = "dtd";
                        break;
                    case XmlNodeType.Element:
                        msg = "开始标记:" + xml.Name;
                        break;
                    case XmlNodeType.EndElement:
                        msg = "结束标记:" + xml.Name;
                        break;
                    case XmlNodeType.Text:
                        msg = "内容:" + xml.Value;
                        break;
                    case XmlNodeType.Whitespace:
                        msg = "空白节点";
                        break;
                    case XmlNodeType.XmlDeclaration:
                        msg = "xml文件声明:"+xml.Name;
                        break;
                    default:
                        break;
                }
                MessageBox.Show(msg);
            }

优点,每次只读取一条内容,比较节省系统的内容,适合大文件的读取。

二、利用XMLDocument对象一次性将整个XML文档加载到内存中,形成一个有层次关系的DOM树

示例:

复制代码
XmlDocument doc = new XmlDocument();
            doc.Load("../../Part1.xml");
            XmlElement xe = doc.DocumentElement;
            foreach (XmlNode item in xe.ChildNodes)
            {
                string province = item.Attributes["id"].Value.ToString();
                comboBox1.Items.Add(province);
            }

1)XML文档新增节点

复制代码
XmlDocument xml=new XmlDocument();
xml.load("../../Student.xml");
//创建一个节点
XmlNode stnode=xml.CreateElement("节点一");//这里是需要创建的节点的名字
//stnode.InnerText="";//这里可以设置节点中的文本
XmlAttribute sta=xml.CreateAtrribute("id");//这里 创建了一个名为id的属性
stnode.Attributes.Append(sta);//将这个属性添加到stnode节点中
xml.DocumentElement.AppendChild(stuNode)//最后将创建的节点添加到XML文档的根节点中
 xml.Save("../../Student.xml");//最后将修改后的XML保存到磁盘中

2)XML文档修改节点

和新增一样,首先我们需要将整个XML文档加载到内存中。

然后我们需要获取到需要修改的节点

复制代码
XmlNode=xml.selectSingleNode("//student[@stuNo='"+stuNo+"']");

//xpath 路径的写法有两种 //从跟节点开始往后写路径的写法叫绝对路径写法:/students/student/sex //以"//"开头写路径的写法为相对路径的写法://student/sex //如果节点中右属性就用[ ]括起来

找到这个节点之后,重新给节点的InnerTextX属性赋值,就可以实现修改操作。

3)XML文档删除操作

首先,我们同样需要加载XML文档,然后我们需要获取到那个要删除的节点。同样的调用selectSingleNode方法,

最后我们使用xml.removeChild();就可以将节点移除,每次做完操作之后都别忘了调用xml.Save();将操作后的XML文档保存到磁盘中。

XMLDocument属性:

复制代码
DocumentElement  获取文档的根 XmlElement。  
ChildNodes   获取节点的所有子节点。   
HasChildNodes   获取一个值,该值指示节点是否有任何子节点。   
FirstChild   获取节点的第一个子级。  
LastChild   获取节点的最后一个子级   
NextSibling   获取紧接在该节点之后的节点。  
PreviousSibling 获取紧接在该节点之前的节点。  
ParentNode  获取该节点的父级节点。

InnerText   获取或设置节点及其所有子节点的串联值。  
InnerXml  获取或设置表示当前节点子级的标记。   
Attributes   获取一个 XmlAttributeCollection,它包含该节点的属性。  
Value   获取或设置节点的值   
Name 获取节点的限定名。  
LocalName 获取节点的本地名称。  
Prefix  获取或设置该节点的命名空间前缀。

AppendChild  将指定的节点添加到该节点的子节点列表的末尾  
CreateAttribute  创建具有指定名称的 XmlAttribute   
CreateElement  创建 XmlElement  
CreateNode   创建 XmlNode  
CreateTextNode  创建具有指定文本的 XmlText

RemoveAll   移除当前节点的所有子节点和/或属性。   
RemoveChild   移除指定的子节点。   
ReplaceChild   用 newChild 节点替换子节点 oldChild。   
WriteTo  将 XmlDocument 节点保存到指定的 XmlWriter。   
Save  将 XML 文档保存到指定的位置。
相关推荐
小哥Mark1 小时前
Flutter开发鸿蒙年味 + 实用实战应用|绿色烟花:电子烟花 + 手持烟花
flutter·华为·harmonyos
前端不太难3 小时前
HarmonyOS 游戏里,Ability 是如何被重建的
游戏·状态模式·harmonyos
lbb 小魔仙3 小时前
【HarmonyOS实战】React Native 鸿蒙版实战:Calendar 日历组件完全指南
react native·react.js·harmonyos
一只大侠的侠3 小时前
Flutter开源鸿蒙跨平台训练营 Day 3
flutter·开源·harmonyos
盐焗西兰花3 小时前
鸿蒙学习实战之路-Reader Kit自定义字体最佳实践
学习·华为·harmonyos
_waylau4 小时前
鸿蒙架构师修炼之道-架构师的职责是什么?
开发语言·华为·harmonyos·鸿蒙
一只大侠的侠4 小时前
【Harmonyos】Flutter开源鸿蒙跨平台训练营 Day 2 鸿蒙跨平台开发环境搭建与工程实践
flutter·开源·harmonyos
王码码20357 小时前
Flutter for OpenHarmony 实战之基础组件:第三十一篇 Chip 系列组件 — 灵活的标签化交互
android·flutter·交互·harmonyos
坚果派·白晓明8 小时前
在鸿蒙设备上快速验证由lycium工具快速交叉编译的C/C++三方库
c语言·c++·harmonyos·鸿蒙·编程语言·openharmony·三方库
lbb 小魔仙8 小时前
【HarmonyOS实战】OpenHarmony + RN:自定义 useFormik 表单处理
react native·harmonyos