快速入门C#中XML文件操作 最近在用XML做游戏关卡存档使用了XML,之前有过一次整理,但是发现整理的有点垃圾,索性这次一次将这一块的知识点重新整理一遍,方便快速入门 XML文件操作 XML文件说明 xml的实体引用(特殊转义)实体引用[还要加个;]代表<;(是小写的L,不是大写的i)<>;>&;&&apos;’";” XML操作 常见节点说明 常见节点有:XmlNode,XmlAttribute,XmlElement,XmlDocument,XmlDeclaration;所有的节点都是从XmlNode继承下来;XmlElement和XmlDeclaration有些相似是继承XmlLinkedNode,XmlLinkedNode是继承XmlNode,看名字就知道类似模拟链表的操作(像但不是) XmlNode 在Xml文档中表示单个节点 属性Attributes 当前节点的所有属性(可以通过名称,或者所属下标位置来访问)ChildNodes 返回所有的子节点FirstChild 第一个子节点HasChildNodes 是否有子节点LastChild 最后一个子节点InnerText 或设置当前节点的内容(素);素以字符串形式传入,会转义InnerXml 或设置当前节点的内容(素);素以xml形式传入this.[string] 查找第一个名称符合的子节点Name 返回当前节点的限定名称(命名空间+LocalName)(如果没有命名空间则与LocalName一样)LocalName 返回当前节点的本地名称NextSibling 返回同级下一个兄弟节点OutXml 包含当前节点的内容以Xml形式返回OwnerDocument 所属的DocumentParentNode 当前节点的父节点PreviousSibling 返回同级的上一个兄弟节点Value 返回当前节点的值;和InnerText很像但是对于不同节点类型有不同的返回结果;Element 返回null,使用InnerText代替Attribute 返回属性的内容 NodeType 返回当前节点的类型Prefix 返回或设置此节点的命名空间前缀 方法AppendChild(XmlNode) 将指定节点添加到此节点的子节点末尾Clone() 创建此节点的副本,包括子树相当于调用CloneNode(true)CloneNode(bool) 创建此节点的副本,参数为true时克隆此节点下的子树,false时仅克隆节点本身InsertAfter(XmlNode A,XmlNode B) 将A节点插入到B节点后面;不允许B是A的子节点,A,B是不同文档(Document)创建的;InsertBefore(XmlNode A,XmlNode B) 将A节点插入到B节点前面面;不允许B是A的子节点,A,B是不同文档(Document)创建的;PrependChild(XmlNode) 将指定节点添加的此节的子节点表头RemoveAll() 移除当前节点的所有子节点和属性RemoveChild(XmlNode) 删除指定的子节点ReplaceChild(XmlNode new,XmlNode old) 将old替换成new【tip:old必须是该节点的子节点,不能是孙节点或更深】SelectNodes(String) 查找与XPath表达式匹配的节点列表。SelectSingleNode(String) 查找与XPath表达式匹配的第一个节点WriteContentTo(XmlWriter) 将节点的所有子节点保存到指定的XmlWriter(内容等效 InnerXml)WriteTo(XmlWriter) 将当前节点保存到指定的(内容等效 OuterXml) XmlDocument 表示 XML 文档。 可使用此类在文档中加载、验证、编辑、添加和放置 XML。 属性DocumentElement Xml文档树的根,不存在返回null(与FirstChild不同,FirstChild会到Xml的DOCTYPE声明,但是可以用LastChild代替根,因为根只能有一个)DocumentType 包含 DOCTYPE 声明的节点PreserveWhitespace 或设置一个值,该值指示是否在素内容中保留空白区域。在Load前为true,则保留文本的格式;为false时会则保留有效的空白(父子节点之间是两个空格的缩进)在Save前为true,则文档中的空白将保留在输出中;为false时会自动缩进输出 方法CreateAttribute(String) 创建具有指定Name的XmlAtrributeCreateElement(String) 创建具有指定Name的XmlElementCreateXmlDeclaration(String version , String encoding, String standalone) 创建XmlDeclaration,version必须是“1.0”,encoding建议是“UTF-8”,standalone建议填“”或者String.EmptyGetElementById(String) 具有指定 ID 的XmlElement(操作有点麻烦,不考虑)GetElementsByTagName(String) 返回一个XmlNodeList,包含所有节点名称与Name匹配的所有子素;Load(String) 从指定的 URL 加载 XML 文档;还有很多加载的,略LoadXml(String) 从指定的字符串加载 XML 文档Save(String) 将 XML 文档保存到指定的文件。 如果存在指定文件,则此方法会覆盖它;还有很多保存的,略 XmlDeclaration 表示 XML 声明节点 <?xml version=’1.0’…?>。 大部分都有,略 XmlElement 表示素 属性HasAttributes 是否有任何属性IsEmpty 或设置素的标记格式;为true时,格式为 <item/>;为false时<item></item>,或者有内容在里面;主动设置ture时会以短标记 方法GetAttribute(string) 返回具有指定名称的属性的值GetAttributeNode(String) 返回具有指定名称的XmlAttributeGetElementsByTagName(String) 返回一个XmlNodeList,包含所有节点名称与Name匹配的所有子素;HasAttribute(String) 确定当前节点是否具有带有指定名称的属性RemoveAll() 移除当前节点的所有子节点和属性RemoveAllAttributes() 从素中删除所有指定的属性(只针对当前节点,子节点不受影响)RemoveAttribute(String) 按名称删除指定属性RemoveAttributeAt(int) 按索引删除指定属性RemoveAttributeNode(XmlAttribute) 通过XmlAttribute来删除指定属性SetAttribute(String name, String value) 设置具有指定名称的属性的值SetAttributeNode(XmlAttribute) 添加指定的XmlAttribute XmlAttribute 表示属性 属性Prefix 返回或设置此节点的命名空间前缀Value 返回或设置属性的值 方法 基本上用不到方法,略 XML输入输出流 XmlReader 表示提供对 XML 数据进行快速、非缓存、只进访问的读取器。 XmlWriter 表示一个写入器,该写入器提供一种快速、非缓存和只进方式以生成包含 XML 数据的流或文件。 XmlWriterSetting属性内容默认值Encoding使用的文本编码utf-8Indent是否缩进素flase(无缩进)IndentChars缩进时使用的字符串两个空格NewLineChars用于换行的字符串\r\nOmitXmlDeclaration隐藏XML声明(抬头有版本和文本编码的声明)false(不隐藏) 案例 XPath XPath 使用路径表达式来选取 XML 文档中的节点或节点集 语法 例子 选取节点 表达式描述nodename选取此节点的所有(叫nodename)子节点/从根节点选取(取子节点)//从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置(取子孙节点)。.选取当前节点..选取当前节点的父节点@选取属性路径表达结果skill(从root出发)得到root所有叫skill的子节点/root/child/name从文档出发找到所有name节点的绝对路径满足这个(结果1,2都有)注释:假如路径起始于正斜杠( / ),则此路径始终代表到某素的绝对路径!child/name从当前节点开始,选取所有child节点中的所有name节点(相对路径)//name选取所有name节点,而不管它们在文档中的位置(与当前节点无关)root/child//name选取所有root子节点中的所有child节点下的所以name节点(不管在child之下的位置)(比上面的查找全部name,这个是查找child下的所有name)//@name选取名为 name 的所有属性root/skill/@name查找到所有root/skill节点所有名为 name 的所有属性 谓语 谓语用来查找某个特定的节点或者包含某个指定的值的节点表达式结果root/skill[1]选取root子节点第一个skill(下标是从1开始)root/skill[last()]选取root子节点最后个skillroot/skill[last()-1]选取root子节点倒数第二个skillroot/skill[position()<3]选取root子节点最前面的两个skill(判断符号 <,<=,=,>,>=,!= 除了等于比较特殊)//skill[@name]选取所有拥有名为 name 的属性的 skill素。root/skill[@name = ‘重击’]选取所有拥有名为 name属性为重击 的 skill素。root/child[name > 1]选取所有root节点中所有child节点,且name节点的值大于1(值为数值的时候才能比较) 选取未知 通配符描述*匹配任何素节点@*匹配任何属性节点表达式结果/root/*选取root下所有子素//*选取当前节点下的所有节点(以递归的顺序将所有节点输出)//child[@*]选取所有带属性的child节点 选取若干 使用 | 来去若干表达式结果/root/skill | /root/child/name选取root/skill和root/child/name 运算符 运算符描述实例返回值|计算两个节点集//book | //cd返回所有拥有 book 和 cd 素的节点集+加法6 + 410-减法6 – 42*乘法6 * 424div除法8 div 42=等于price=9.80如果 price 是 9.80,则返回 true。如果 price 是 9.90,则返回 false。!=不等于price!=9.80如果 price 是 9.90,则返回 true。如果 price 是 9.80,则返回 false。<小于price<9.80如果 price 是 9.00,则返回 true。如果 price 是 9.90,则返回 false。<=小于或等于price<=9.80如果 price 是 9.00,则返回 true。如果 price 是 9.90,则返回 false。>大于price>9.80如果 price 是 9.90,则返回 true。如果 price 是 9.80,则返回 false。>=大于或等于price>=9.80如果 price 是 9.90,则返回 true。如果 price 是 9.70,则返回 false。or或price=9.80 or price=9.70如果 price 是 9.80,则返回 true。如果 price 是 9.50,则返回 false。and与price>9.00 and price<9.90如果 price 是 9.80,则返回 true。如果 price 是 8.50,则返回 false。mod计算除法的余数5 mod 21
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/33769.html