当前位置: 首页 > news >正文

Java高级编程--XML

Java高级编程–XML

文章目录

  • Java高级编程--XML
    • 1.XML简介
    • 2.XML文档结构
    • 3.XML标签
    • 4.XML编写注意事项
    • 5.XML解析器
    • 6.XML命名空间
    • 7.解析XML技术
      • 7.1DOM解析XML
      • 7.2DOM4J解析XML
        • 7.2.1常用方法
        • 7.2.2创建一个新的XML文档并设置XML编码将文档写入文件
        • 7.2.3解析XML文件

1.XML简介

  • XML(EXtensible Markup Language),可扩展标记语言

  • 特点

    • XML与操作系统、编程语言的开发平台无关

    • 实现不同系统之间的数据交换

  • 作用

    • 数据交互
    • 配置应用程序和网站
    • Ajax基石

2.XML文档结构

XML文档结构:

  • 声明:XML 声明文件的可选部分,若存在需要放在文档的第一行
  • 文档描述信息
<?xml version="1.0" encoding="UTF-8"?>   //声明
声明:version:文档符合xml1.0规范encoding:文档字符编码,默认为UTF-8
<books><!--图书信息 --><book id="bk101"><author>王珊</author><title>.NET高级编程</title><description>包含C#框架和网络编程等</description></book><book id="bk102"><author>李明明</author><title>XML基础编程</title><description>包含XML基础概念和基本作用</description></book>
</books>
文档结构解释:XML文档必须有一个根元素根元素的开始标签:放在最前面根元素的结束标签:放在最后面标签内容在开始标签和结束标签之间元素可以包含属性,属性提供有关元素的附加信息。

3.XML标签

  • XML文档内容由一系列标签元素组成

    • 属性值用双引号包裹

      <元素名 属性名=“属性值”>元素内容</元素名>
      eg:
      <student id="001"><name>王显明</name><expectedscore>75</expectedscore><actualscore>80</actualscore>
      </student>
      
    • 一个元素可以有多个属性

    • 属性值中不能直接包含<&

    • 不建议使用的字符:>

空元素:
<name>  </name>
<name></name>
<name/>

4.XML编写注意事项

  • 所有XML元素都必须有结束标签

  • XML标签对大小写敏感

  • XML必须正确的嵌套

  • 同级标签以缩进对齐

  • 元素名称可以包含字母、数字或其他的字符

  • 元素名称不能以数字或者标点符号开始

  • 元素名称中不能含空格

  • 实体引用来代替 特殊字符

    &lt;<less than
    &gt;>greater than
    &amp;&ampersand
    &apos;apostrophe
    &quot;"quotation mark
  • XML 中的注释

    <!--This is a comment -->
    
  • 避免-字符

  • 避免.字符

  • 避免:字符

5.XML解析器

  • 解析器类型
    • 非验证解析器
      • 检查文档格式是否良好
    • 验证解析器
      • 使用DTD检查文档的有效性

6.XML命名空间

  • XML命名空间的作用
    • 解决在复杂、大型XML文件中,出现名称相同,但是含义不同的元素

7.解析XML技术

  • DOM
    • 基于XML文档树结构的解析
    • 适用于多次访问的XML文档
    • 特点:比较消耗资源
  • SAX
    • 基于事件的解析
    • 适用于大数据量的XML文档
    • 特点:占用资源少,内存消耗小
  • DOM4J
    • 非常优秀的Java XML API
    • 性能优异、功能强大
    • 开放源代码

7.1DOM解析XML

  • DOM介绍

    • 文档对象模型(Document Object Model)
    • DOM把XML文档映射成一个倒挂的树
      在这里插入图片描述
  • 常用接口介绍

    • DOM解析包:org.w3c.dom
常用接口常用方法说明
Document:表示整个 XML 文档NodeList getElementsByTagName(String Tag)按文档顺序返回文档中指定标记名称的所有元素集合
Document:表示整个 XML 文档Element createElement(String tagName)创建指定标记名称的元素
Node:该文档树中的单个节点NodeList getChildNodes()获取该元素的所有子节点,返回节点集合
Element:XML 文档中的一个元素String getTagName()获取元素名称
  • 访问DOM树节点

  • DOM解析XML文件步骤

    • 创建解析器工厂对象
    • 解析器工厂对象创建解析器对象
    • 以Document对象为起点操作DOM树
    <?xml version="1.0" encoding="UTF-8"?>
    <books><book><name>Java程序设计</name><author>王显明</author><price>50</price></book><book ><name>Java基础</name><author>黑马程序员</author><price>50</price></book><book><name>数据结构</name><author>严蔚敏</author><price>70</price></book>
    </books>
    
    package com.hz.ch10;
    import org.w3c.dom.Document;
    import org.w3c.dom.Element;
    import org.w3c.dom.NodeList;
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;public class Test {public static void main(String[] args) {try{//创建DocumentBuilderFactory对象DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();//创建DocumentBuilder对象DocumentBuilder db = dbf.newDocumentBuilder();//解析XML文档,返回Document对象Document d=db.parse("book.xml");//获取根元素d.getDocumentElement().normalize();//获取所有book元素Element element=d.getDocumentElement();NodeList nodeList=element.getElementsByTagName("book");for (int i = 0; i < nodeList.getLength(); i++) {System.out.println(nodeList.item(i).getTextContent());}} catch (Exception e) {e.printStackTrace();}}}
    
  • 保存XML文件

    • 获得TransformerFactory对象
    • 创建Transformer对象
    • 创建DOMSource对象
      • 包含XML信息
    • 设置输出属性
      • 编码格式
    • 创建StreamResult对象
      • 包含保存文件的信息
    • 将XML保存到指定文件中
  • 添加DOM节点

  • 修改/删除DOM节点

7.2DOM4J解析XML

7.2.1常用方法
  • org.dom4j.Document常用方法

    • 获取根节点

      Element getRootElement();
      
  • org.dom4j.Element的常用方法

    • 返回标签的名称

      String getName();
      
    • 获取当前节点下所有子节点

      List<Element>  elements();
      
    • 获取指定属性名称的属性值

      String attributeValue(String name)
      
    • 获取标签文本

      String getText()
      
    • 获取指定名称的子标签的文本

      String elementText(String name);
      
    • 设置XML编码

      OutputFormat format = OutputFormat.createPrettyPrint();
      format.setEncoding("UTF-8");
      
    • 新XML添加Documen对象

       Document document = DocumentHelper.createDocument();
      
    • 创建节点Element对象.addElement(“节点名”)

       Element apple = fruit.addElement("apple");
      
    • 节点添加,修改属性Element对象

      addAttribute("节点属性名",“属性值”)
      apple.addAttribute("type", "red");
      
7.2.2创建一个新的XML文档并设置XML编码将文档写入文件
package com.hz.ch10.dom4jtest01;
/*** 创建XML文件*/
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;import java.io.FileWriter;
import java.io.IOException;public class Test01 {public static void main(String[] args) {//创建Document对象Document document = DocumentHelper.createDocument();//添加根元素Element fruit = document.addElement("fruit");//添加子元素Element apple = fruit.addElement("apple");//添加属性apple.addAttribute("type", "red");apple.addElement("name").addText("红富士");apple.addElement("weight").addText("0.5kg");Element mango = fruit.addElement("mango").addAttribute("type", "yellow");mango.addElement("name").addAttribute("id", "1001").addText("芒果");mango.addElement("weight").addText("0.3kg");//写出到文件try {FileWriter fw = new FileWriter("fruit1.xml");XMLWriter xmlWriter = new XMLWriter(fw);xmlWriter.write(document);xmlWriter.close();fw.close();} catch (IOException e) {throw new RuntimeException(e);}//格式化输出OutputFormat of =null;XMLWriter xmlWriter=null;try {FileWriter fw = new FileWriter("fruit2.xml");of  = OutputFormat.createPrettyPrint();xmlWriter = new XMLWriter(fw, of);xmlWriter.write(document);xmlWriter.close();} catch (IOException e) {throw new RuntimeException(e);}//紧凑输出try {of=OutputFormat.createCompactFormat();xmlWriter=new XMLWriter(System.out,of);xmlWriter.write(document);xmlWriter.close();} catch (IOException e) {throw new RuntimeException(e);}}
}
7.2.3解析XML文件
package com.hz.ch10.dom4jtest01;import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;import java.util.Iterator;/*** 解释XML文件*/
public class Test02 {public static void main(String[] args) {try {//解析器SAXReader saxReader = new SAXReader();Document document = saxReader.read("fruit1.xml");//获取根元素Element fruit = document.getRootElement();//遍历根的子元素Iterator<Element> it = fruit.elementIterator();while (it.hasNext()){Element element = it.next();System.out.println(element.getName()+"的属性:"+element.attributeValue("type"));}//遍历元素名为“apple”的根的子元素Iterator<Element> elementIterator = fruit.elementIterator("apple");while (elementIterator.hasNext()){Element element = elementIterator.next();System.out.println(element.getName()+"的属性:"+element.attributeValue("type"));}//遍历3Iterator<Element> elementIterator = fruit.elementIterator();while (elementIterator.hasNext()) {Element child = elementIterator.next();//获取当前子元素下的<name>标签Element name = child.element("name");//获取<name>标签的文本内容String text = name.getText();System.out.println(child.getName() + "的名称:" + text);//获取当前子元素下的<weight>标签Element weight = child.element("weight");System.out.println(child.getName() + "的重量:" + weight.getText());String id = name.attributeValue("id");if (id != null) {System.out.println(child.getName() + "的id:" + id);}}} catch (Exception e) {e.printStackTrace();}}
}
  • DOM4J解析XML工具类
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;import java.io.FileWriter;
import java.util.List;public class UtilsXML {private  static Document document=null;/*** 初始化* @param path* @throws Exception*/public static void info(String path) throws Exception {//构建XML的解析器SAXReader saxReader = new SAXReader();//读取XML文件  返回Document对象document = saxReader.read(path);}/*** 新增XML*/public static void saveXML(){document = DocumentHelper.createDocument();Element root = document.addElement("books");Element book = root.addElement("book").addAttribute("id", "1001");book.addElement("name").setText("Java");}/*** 读取XML*/public static void findXML(){Element root = document.getRootElement();List<Element> elementList= root.elements();for (Element element : elementList) {String id=element.attributeValue("type");System.out.println("-----"+id+"------");//获取子元素List<Element> elementList1 = element.elements();for (Element element1 : elementList1) {System.out.println(element1.getName()+""+element1.getText());}}}/*** 编辑XML*/public static void editXML() throws Exception {Element rootElement = document.getRootElement();List<Element> elementList = rootElement.elements();for (Element element : elementList) {if(element.attributeValue("type").equals("yellow")){element.element("name").setText("mango");}}Element grape = rootElement.addElement("grape");grape.addAttribute("type","purple");grape.addElement("name").setText("葡萄");grape.addElement("weight").setText("0.1kg");//保存XMLoutputXML("fruit2.xml");}/*** 删除XML*/public static void delXML() throws Exception {Element rootElement = document.getRootElement();List<Element> elementList = rootElement.elements();for (Element element : elementList) {if(element.attributeValue("type").equals("purple")){element.getParent().remove(element);}}//保存XMLoutputXML("fruit2.xml");}/*** 写入XML* @param path* @throws Exception*/public static void outputXML(String path) throws Exception {OutputFormat outputFormat = OutputFormat.createPrettyPrint();XMLWriter xmlWriter = new XMLWriter(new FileWriter(path),outputFormat);xmlWriter.write(document);xmlWriter.close();}public static void main(String[] args) {try {info("fruit2.xml");//findXML();//editXML();delXML();} catch (Exception e) {throw new RuntimeException(e);}}
}

文章转载自:

http://jYHJTeCe.bpmtq.cn
http://9drQ56et.bpmtq.cn
http://tWkWUuGS.bpmtq.cn
http://s8y3nrwm.bpmtq.cn
http://4DDbyjAO.bpmtq.cn
http://og8wHIeC.bpmtq.cn
http://LaUL3FbJ.bpmtq.cn
http://31eKW80w.bpmtq.cn
http://xOzI4Twi.bpmtq.cn
http://4wDWda8N.bpmtq.cn
http://iIa365vj.bpmtq.cn
http://GB5U9o5X.bpmtq.cn
http://w39c0A29.bpmtq.cn
http://WVvNor43.bpmtq.cn
http://mluPSsaG.bpmtq.cn
http://iP9UIFzF.bpmtq.cn
http://kF5tpx9o.bpmtq.cn
http://9xwIYiDg.bpmtq.cn
http://Vq4SbTKv.bpmtq.cn
http://jZyjvcNC.bpmtq.cn
http://5cXrdOXp.bpmtq.cn
http://8poCxJ02.bpmtq.cn
http://KHhit9HU.bpmtq.cn
http://3TB1HIew.bpmtq.cn
http://wY3CB748.bpmtq.cn
http://9wKCJWWB.bpmtq.cn
http://ye8LR0b5.bpmtq.cn
http://M4lLKSSZ.bpmtq.cn
http://6TzrHGCJ.bpmtq.cn
http://KZB14Lgg.bpmtq.cn
http://www.dtcms.com/a/373548.html

相关文章:

  • Nano Banana 技术深度解析:重新定义AI影像的革命性里程碑
  • 运作管理学习笔记5-生产和服务设施的选址
  • 基于单片机的智能路灯(论文+源码)
  • Python中hashlib模块 - 哈希加密
  • Webpack开发:从入门到精通
  • paddlex3.0.1-ocr服务化安装部署(docker)
  • [Upscayl图像增强] 应用程序状态管理 | 响应式状态Jotai | 持久化设置
  • 趣味学RUST基础篇(函数式编程闭包)
  • 5000+张带XML标注的杂货货架数据集:专为目标检测与产品识别设计的零售AI训练数据,助力智能超市与计算机视觉研究
  • 【项目】-mipi摄像头从0开发的过程
  • 宁波浙江制造认证、立标
  • k8s常用命令详解
  • uv使用指南
  • GPS汽车限速器有哪些功能?主要运用在哪里?
  • ARM 基础(2)
  • 【Unity】使用ProtobufNet处理数据
  • (回溯/组合)Leetcode77组合+39组合总和+216组合总和III
  • 2025年渗透测试面试题总结-59(题目+回答)
  • 如何使用Docker快速运行Firefox并实现远程访问本地火狐浏览器的教程
  • [硬件电路-167]:Multisim - 标准的元件库
  • 人工智能-python-深度学习-经典网络模型-LeNets5
  • 蜂窝物联网模组在换电柜场景的发展前景分析
  • HTTPS 端口与 iOS 抓包 常见问题与工具选择
  • HTTP response code 200 206 416详解
  • TensorFlow 2.x 核心 API 与模型构建
  • 使用Maven完成项目创建
  • 【python】python进阶——多线程
  • Nginx+Tomcat集群Redis共享session方案
  • 服务器 | Docker应用开发与部署的实践以及阿里云镜像加速配置
  • 2025全栈3.0:多模态开发指南