• java-xml


    XML

    1.XML介绍

    XML 可扩展标记语言(eXtensible Markup Language)没有预定义任何标签,需要自行定义标签

    XML的特点   与操作系统 编程语言无关 可实现不同系统之间数据交换

    XML作用      数据存储  数据交换 数据配置

    2.XML和HTML的区别

    XML 不是 HTML 的替代。

    XML 和 HTML 为不同的目的而设计:

    • XML 被设计用来传输和存储数据,其焦点是数据的内容。
    • HTML 被设计用来显示数据,其焦点是数据的外观。

    HTML 旨在显示信息,而 XML 旨在传输信息。

    3.XML语法

                       

    <标签名 属性名="属性值" 属性名="属性值" > 标签内容[空内容,其他标签,文本] </标签名>


    元素的命名规则如下:
    名称中可以包含字母、数字或者其他的字符
    名称不能以数字或者标点符号开始
    名称不能以字符“xml”(或者XML、Xml)开始
    名称中不能含空格


    属性的语法规则如下:
    属性可以加在任何一个元素的起始标签上,但不能加在结束标签上
    属性值用双引号包裹
    一个元素可以有多个属性,多个属性之间用空格隔开
    属性值中不能直接包含 <、"、&

    特殊符号处理:
    方式1: 特殊代码
    < &lt;
    > &gt;
    " &quot;
    ' &apos;
    & &amp;
    方式2: 将内容声明普通文本
    <description>
    <![CDATA[ 讲解了元素<title>以及</title>的使用 ]]>
    </description>

    要求:
    格式良好的XML文档需要遵循如下规则
    1.有XML声明语句: <?xml version="1.0" encoding="UTF-8/[gb2312]"?>
    2.有且仅有一个根元素: 根标签需要包裹整个文件内容.
    3.标签大小写敏感: <A> <a> [HTML中,大小写不区分]
    4.属性值用双引号/单引号: <a href="sdsds"></a> <a href='sdsds'></a>
    5:标签成对/空标签关闭: 标签必须有开始和结束. <标签名/> 或 <标签名></标签名>
    6.元素正确嵌套

          

    4.XML解析四种方式

    DOM

    SAX

    JDOM

    DOM4j

    5.DOM解析XML

     

    <?xml version="1.0" encoding="utf-8" ?>
    <PhoneInfo>
        <Brand name="华为">
            <Type name="P90"></Type>
        </Brand>
        <Brand name="苹果">
            <Type name="iPhone Z"/>
            <Type name="iPhone ZL"/>
        </Brand>
    </PhoneInfo>
    public class TestDOM {
        public static void main(String[] args) throws ParserConfigurationException, IOException, SAXException {
            //1.DOM解析工厂实例
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            //2.DOM解析器
            DocumentBuilder builder = factory.newDocumentBuilder();
            //3.构建DOM对象
            Document document = builder.parse("W:\StudyWorkSpace\TestXML\src\phone.xml ");
    
            //4.操作DOM对象 解析xml
            //getElementsByTagName() 指定名称下的所有标签
            //getLength() 标签的个数
            //item()   指定位置的标签
            //getAttribute() 指定属性值
            NodeList nodeList = document.getElementsByTagName("Brand");
            for (int i = 0; i < nodeList.getLength(); i++) {
                Element brand = (Element) nodeList.item(i);
                String name = brand.getAttribute("name");
                System.out.println("name = " + name );
                NodeList types = brand.getElementsByTagName("Type");
                for (int j = 0; j < types.getLength(); j++) {
                   String typeName =((Element) types.item(j)).getAttribute("name");
                    System.out.println("typeName = " + typeName);
                }
            }
    
        }
    }

    DOM CRUD XML文件

    <?xml version="1.0" encoding="utf-8" ?>
    <PhoneInfo>
        <Brand name="华为">
            <Type name="P90"></Type>
        </Brand>
        <Brand name="苹果">
            <Type name="iPhone Z"/>
            <Type name="iPhone ZL"/>
        </Brand>
    </PhoneInfo>
    ublic class TestNewCRUD {
        public static void main(String[] args) throws ParserConfigurationException, IOException, SAXException, TransformerException {
            //1.DOM解析工厂实例
            DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
    
            //2.DOM解析器
            DocumentBuilder documentBuilder = builderFactory.newDocumentBuilder();
    
            //3.DOM对象
            Document document = documentBuilder.parse("W:\StudyWorkSpace\TestXML\src\newPhone.xml");
    
            //4.操作DOM对象  添加节点 修改节点 删除节点 保存xml
            //添加节点
            Element newBrand = document.createElement("Brand");
            newBrand.setAttribute("name","三星");
    
            Element newType = document.createElement("Type");
            newType.setAttribute("name","s111");
    
            //建立父子节点关系
            newBrand.appendChild(newType);
    
            //添加到整个文档对象中
            document.getElementsByTagName("PhoneInfo").item(0).appendChild(newBrand);
    
    
            //修改节点
            Element element = (Element) document.getElementsByTagName("Brand").item(2);
            element.setAttribute("name" ,"SAMSUNG");
    
            //删除节点
            Element elementDel = (Element) document.getElementsByTagName("Brand").item(2);
            //获得父节点在删除子节点
            Node parentNode = element.getParentNode();
            parentNode.removeChild(elementDel);
    
    
            //保存xml
            //创建DOM源 内存
            DOMSource domSource = new DOMSource(document);
    
            //创建流 写入磁盘
            StreamResult result = new StreamResult(new FileOutputStream("newPhone01.xml"));
    
            //设置文件格式
            TransformerFactory transformerFactory = TransformerFactory.newInstance();
            Transformer transformer = transformerFactory.newTransformer();
            transformer.setOutputProperty(OutputKeys.VERSION,"1.0");
            transformer.setOutputProperty(OutputKeys.ENCODING,"UTF-8");
            transformer.setOutputProperty(OutputKeys.INDENT,"yes");
            transformer.setOutputProperty(OutputKeys.STANDALONE, "yes");
    
            transformer.transform(domSource,result);
    
    
    
        }
    }

    6.DOM4J解析XML


     

     
       
    public class TestDOM4J {
        public static void main(String[] args) throws DocumentException, IOException {
            //1.创建SAXReader对象
            SAXReader reader = new SAXReader();
    
            //2.解析xml文件 获得Document对象
            Document document = reader.read(new File("W:\StudyWorkSpace\TestXML\src\newPhone.xml"));
    
            //DOM4J SAXReader 边读边解析  从根标签开始
            Element rootElement = document.getRootElement();
            //打印整个文件内容
            System.out.println(document.asXML());
    
    
            List<Element> list = rootElement.elements("Brand");
            //读取: 属性,文本
            List<Element> allBrand=rootElement.elements("Brand");
            for (Element element : allBrand) {
                //操作属性
                //element.attribute("name").getValue();
                String name=element.attributeValue("name");
                //操作子标签
                List<Element> typeList=element.elements("Type");
                for (Element typeE : typeList) {
                    String typeName=typeE.attributeValue("name");
                    System.out.println(name+"-"+typeName);
                }
            }
    
            //添加
            Element newBrand = rootElement.addElement("Brand");
            newBrand.addAttribute("name" ,"sanxing");
            Element newType = newBrand.addElement("Type");
            newType.addAttribute("name","yyyy");
    
            //修改
             newBrand.setAttributeValue("name","三星");
    
            //删除
            rootElement.remove(newBrand);
    
            //保存
            OutputFormat out = OutputFormat.createPrettyPrint();
            out.setEncoding("UTF-8");
    
            XMLWriter writer = new XMLWriter(new FileOutputStream("新手机.xml"), out);
            writer.write(document);
            writer.close();
    
        }
    }


    古人学问无遗力,少壮工夫老始成。 纸上得来终觉浅,绝知此事要躬行。
  • 相关阅读:
    spark学习3(sqoop1.4.6安装)
    SpringBoot配置文件 application.properties详解
    十大经典算法
    JAVA中ACTION层, SERVICE层 ,MODLE层 和 DAO层的功能区分
    Spring Cloud 与 Spring boot
    Java 读取 .properties 配置文件的几种方式
    编程实现文件拷贝
    Java中的日期和时间
    遍历List集合的三种方法
    通过Collections将集合转换为线程安全类集合
  • 原文地址:https://www.cnblogs.com/wf-zhang/p/14164344.html
Copyright © 2020-2023  润新知