• 可扩展标记语言XML(淅淅沥沥的小雨)


    XML简述

      XML用于描述数据,是当前处理结构化文档信息的有力工具。与操作系统编程语言的开发平台无关,可以实现不同系统之间的数据交互。

      xml文件结构:

    1 <?xml version="1.0" encoding="UTF-8" ?>
    2 <people>
    3     <Name>姓名</Name>
    4     <Sex>性别</Sex>
    5 </people>

     代码中第一行是XML声明,它一般在XML文档的第一行。它由两个部分组成:

        version:文档符合XML1.0规范。

        encoding:文档字符编码,默认为“UTF-8”。

        <!--注释-->为注释语法。

    XML语言有3个特点:

        1.XML中的每对标记通常被称为节点,他们是成对出现而且必须成对出现的,用来描述这个节点存储的内容。在节点中存储该节点的信息。

        2.XML中用于描述数据的各个节点可以自由横向扩展和纵向扩展,即可以向下扩展也可以向内扩展(嵌套)。

        3.XML文件中的节点严格区分大小写。例:<Name>名字</Name>和<name>名字</name>这两个节点内容相同,但节点名称不一样,即是两个节点。

    在C#中操作XML文件

      在C#中操作并解析XML文件分为6个步骤:

    复制代码
     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 using System.Xml;               //1.引入命名空间
     7 
     8 namespace Demo
     9 {
    10     class Program
    11     {
    12         static void Main(string[] args)
    13         {
    14             XmlDocument doc = new XmlDocument();                                //2.创建XML文件对象
    15             doc.Load("Path.xml");                                               //3.从指定路径读取整个XML文件的结构
    16             XmlNode nodes = doc.DocumentElement;                                //4.获取XML文件的根节点
    17             foreach (XmlNode node in nodes.ChildNodes)                          //5.遍历根节点的子节点
    18             {
    19                 string name = node["name"].InnerText;                           //6.获取XML文件节点中的内容
    20                 string sex = node["sex"].InnerText;
    21                 Console.WriteLine("姓名:{0},性别:{1}", name, sex);
    22             }
    23         }
    24     }
    25 }
    复制代码

    XmlDocument对象:

        表示整个XML文档,它使用Load方法将指定的XML文件读入XmlDocument对象,Load方法的参数是XML文档的路径。

        DocumentElement属性用于获取根节点。

    XmlNode对象:

        XmlNode对象表示一个XML中的节点。
        ChildNodes属性用来获取指定节点的所有子节点。

        Name属性可以获取当前节点的名称。                         例:<name>名字</name>获取name。

        Inner Text属性用来获取当前节点的值。                     例:<name>名字</name>获取名字。

        Attributes属性可以获取当前节点的特性。                  例:<name type="dog">名字</name>      Attributes["type"]获取dog。

         注意:ChildNodes属性表示当前节点的所有子节点,这里的所有子节点表示的是当前子节点的集合。

    XML解析

    XML文件除了给开发者看,更多的情况使用程序读取xml文件的内容。这叫做xml解析

    XML解析方式(原理不同)

    DOM解析

    SAX解析

    XML解析工具

    DOM解析原理: 1)JAXP (oracle-Sun公司官方)

    2)JDOM工具(非官方)

    3)Dom4J工具(非官方) 三大框架(默认读取xml的工具就是Dom4j) ....... SAX解析原理:1)Sax解析工具(oracle-sun公司官方

    什么是DOM解析

    DOM解析原理:xml解析器一次性把整个xml文档加载进内存, 
    然后在内存中构建一颗Document的对象树,通过Document对象, 
    得到树上的节点对象,通过节点对象访问(操作)到xml文档的内容。

    Dom4j工具

    非官方,不在jdk中。 使用步骤: 1)导入dom4j的核心包。 dom4j-1.6.1.jar

    2)编写Dom4j读取xml文件代码

    * 示例

        /**
         * 第一个Dom4j读取xml文档的例子
         * @author APPle
         *
         */
        public class Demo1 {
            public static void main(String[] args) {
                try {
                    //1.创建一个xml解析器对象
                    SAXReader reader = new SAXReader();
                    //2.读取xml文档,返回Document对象
                    Document doc = reader.read(new File("./src/contact.xml"));
    
                    System.out.println(doc);
                } catch (DocumentException e) {
                    e.printStackTrace();
                    throw new RuntimeException(e);
                }
            }
        }

    Domj4读取xml文件

    • 节点:
    • Iterator  Element.nodeIterator();  //获取当前标签节点下的所有子节点
      • 案列:
        /**
         * 得到节点信息
         */
        @Test
        public void test1() throws Exception{
            //1.读取xml文档,返回Document对象
            SAXReader reader = new SAXReader();
            Document doc = reader.read(new File("./src/contact.xml"));
            //2.nodeIterator: 得到当前节点下的所有子节点对象(不包含孙以下的节点)
            Iterator<Node> it = doc.nodeIterator();
            while(it.hasNext()){//判断是否有下一个元素
                Node node = it.next();//取出元素
                //继续取出其下面的子节点
                //只有标签节点才有子节点
                //判断当前节点是否是标签节点
                if(node instanceof Element){
                    Element elem = (Element)node;
                    Iterator<Node> it2 = elem.nodeIterator();
                    while(it2.hasNext()){
                        Node n2 = it2.next();
                        System.out.println(n2.getName());
                    }
                }
            }
        }
      • 案例2:得到xml所有节点(使用递归)

        /**
         * 遍历xml文档的所有节点
         * @throws Exception
         */
        @Test
        public void test2() throws Exception{
            //1.读取xml文档,返回Document对象
            SAXReader reader = new SAXReader();
            Document doc = reader.read(new File("./src/contact.xml"));
            //得到根标签
            Element rooElem = doc.getRootElement();
            getChildNodes(rooElem);
        }
        
        /**
         * 获取 传入的标签下的所有子节点
         * @param elem
         */
        private void getChildNodes(Element elem){
            System.out.println(elem.getName());
            //得到子节点
            Iterator<Node> it = elem.nodeIterator();
            while(it.hasNext()){
                Node node = it.next();
                //1.判断是否是标签节点
                if(node instanceof Element){
                    Element el = (Element)node;
                    //递归
                    getChildNodes(el);
                }
            };
        }
  • 相关阅读:
    VS2013 使用QCustomPlot等三方库如何配置
    error LNK1112:模块计算机类型"X64" 与目标计算机类型"X86" 冲突
    Qt 获取屏幕当前分辨率
    流程控制
    导航条和工作内容纪要
    js简介
    高度塌陷
    浮动
    文档流
    display和overflow
  • 原文地址:https://www.cnblogs.com/java-123/p/8902412.html
Copyright © 2020-2023  润新知