首页 > 其他分享 >XML技术说明及应用

XML技术说明及应用

时间:2024-01-26 09:11:36浏览次数:23  
标签:XML xml 应用 说明 student new newStu document

XML技术

作用

1.解决程序间数据传输的问题:相当于 json
比如qq之间的数据传送,用xml格式来传送数据,具有良好的可读性,可维护性。

2.xml可以做配置文件
xml文件做配置文件可以说非常的普遍,比如tomcat服务器的server.xml 、web.xml

3.xml可以充当小型的数据库
xml文件做小型数据库,也是不错的选择,我们程序中可能用到的数据,如果放在数据库中读取不合适(因为你要增加维护数据库工作),可以考虑直接用xm来做小型数据库,而且直接读取文件显然要比读取数据库快

<?xml version="1.0" encoding="UTF-8"?>
<!--
	xml是扩展标记语言,标签可以自定义
    1.xml代表文件的类型xml
    2.version="1.0"版本号
    3.encoding="UTF-8"文件编码
    4.students:root元素
    5.<student></student>表示students的子元素,可以有多个
    6.id属性
    7.name、age、gender
-->
<students>
    <student id="100">
        <name>jack</name>
        <age>10</age>
        <gender>男</gender>
    </student>
    <student id="200">
        <name>lili</name>
        <age>20</age>
        <gender>女</gender>
    </student>
</students>

文档声明

1.XML声明放在XML文档的第一行
2.version="1.0"版本号
3.encoding="UTF-8"文件编码

<?xml version="1.0" encoding="UTF-8"?>

元素

每个XML文档必须有且只有一个根元素。
根元素是一个完全包括文档中其他所有元素的元素。
根元素的起始标记要放在所有其他元素的起始标记之前。
根元素的结束标记要放在所有其他元素的结束标记之后。

如果没有标签体:<group/>,不能空着例如:<group></group>

<students>
    <student id="100">
        <name>jack</name>
        <group/>
        <user_id>0911200314</user_id>
    </student>
</students>

命名规范

1.区分大小写<QY></QY><qy></qy>有区别
2.不能以数字开头
3.不能包含空格
4.名称中间不能有冒号,可以用下划线

属性

1.属性值用单引号或双引号进行分隔
2.一个元素可以有多个属性
3.特定的属性名称在同一个元素标记中只能出现一次
4.属性值不能包括&字符

<!--错误-->
<student id="100" id="101">
<!--可以-->
<student id="100" ID="101">

注释

1.注释不能写在标记里
2.注释不能嵌套
3.注释中不能出现--
4.注释可以写在标记以外任何地方

<!--错误-->
<!--  --  -->

CDADA区、特殊字符

有些内容不想让解析引擎执行,而是当作原始内容处理(即当做普通文本),可以使用CDATA包括起来,CDATA节中的所有字符都会被当作简单文本,而不是XML标记。

1.语法

<![CDATA[
这里的内容会原样显示不会解析为xml
]]>

2.可以输入任何字符,但是]]>除外
3.不能嵌套

<!--之前报错的可以显示-->
<![CDATA[
        <!-- -- -->
]]>

转义字符

转义符 符号
&lt; <
&gt; >
&amp; &
&quot; "
&apos; '

XML解析技术原理

1.不管是html文件还是xml文件它们都是标记型文档,都可以使用w3c组织制定的dom技术来解析
2.document对象表示的是整个文档(可以是html文档,也可以是xml文档)

DOM4j

文档(dom4j 1.6.1 API)

需要导入的包
下载dom4j
junit-4.13.1.jar
hamcrest-core-1.3.jar

image

1.Dom4j是一一个简单、 灵活的开放源代码的库(用于解析/处理XML文件)。Dom4j是由早期开发JDOM的人分离出来而后独立开发的。
2.与JDOM不同的是,dom4j使用接口和抽象基类,虽然Dom4j的API相对要复杂一 些, 但它提供了比JDOM更好的灵活性。
3.Dom4j是一个非常优秀的Java XML API,具有性能优异、功能强大和极易使用的特点。现在很多软件采用的Dom4j。
4.使用Dom4j开发,需下载dom4j相应的jar文件

DOM4j中,获取Document对象的三种方式

开发dom4j要导入dom4j的包

1.读取XML文件,获得document对象

SAXReader reader = new SAXReader();	//创建一个解析器
Docunment document = reader.read(new File("src/input.xml"));	//XML Document

2.解析XML形式的文本,得到docunment对象

String text = "<member></members>";
Document document = DocumentHelper.parseText(text);

3.主动创建document对象

Document document = DocumentHelper.createDocument();	//创建根节点
Element root = document.addElement("members");

读取XML信息

image

<?xml version="1.0" encoding="UTF-8" ?>
<students>
    <student id="01">
        <name>孙傲天</name>
        <gender>男</gender>
        <age>101</age>
    </student>
    <student id="02">
        <name>李逍遥</name>
        <gender>男</gender>
        <age>1001</age>
    </student>
</students>

别忘了导包

@Test
public void loadXML() throws DocumentException {
    // 得到一个解析器
    SAXReader reader = new SAXReader();
    Document document = reader.read(new File("src/student.xml"));

    // 1.得到根元素
    Element rootElement = document.getRootElement();
    // 2.得到rootElement的student Elements
    List<Element> students = rootElement.elements("student");
    // 长度
    System.out.println(students.size());
    // 遍历
    for (Element student : students) {
        Element name = student.element("name");
        Element age = student.element("age");
        Element gender = student.element("gender");
        // 具体的值得.getText()
        System.out.println("学生信息 = " + name.getText() + ":" + gender.getText() + ":" + age.getText());
    }
}
// 直接获得一个元素
@Test
public void readOne() throws DocumentException {
    SAXReader reader = new SAXReader();
    Document document = reader.read(new File("src/student.xml"));
    Element rootElement = document.getRootElement();
    // 获取第一个学生
    Element student = (Element) rootElement.elements("student").get(1);
    // 输出
    System.out.println(student.element("name").getText());
    // 获取student元素的属性
    System.out.println(student.attributeValue("id"));
}

添加XML信息

/**
     * 增加元素
     * @throws DocumentException
     * @throws IOException
     */
@Test
public void add() throws DocumentException, IOException {
    SAXReader reader = new SAXReader();
    Document document = reader.read(new File("src/student.xml"));
    // 创建一个学生节点
    Element newStu = DocumentHelper.createElement("student");
    Element newStu_name = DocumentHelper.createElement("name");
    Element newStu_gender = DocumentHelper.createElement("gender");
    Element newStu_age = DocumentHelper.createElement("age");

    // 添加属性
    newStu.addAttribute("id", "03");
    newStu_name.setText("芊嵛");
    newStu_gender.setText("男");
    newStu_age.setText("18");

    // 把子元素添加到newStu中
    newStu.add(newStu_name);
    newStu.add(newStu_gender);
    newStu.add(newStu_age);

    // 再把newStu节点加到根元素
    document.getRootElement().add(newStu);

    // 直接输出会出现中文乱码
    OutputFormat outputFormat = OutputFormat.createPrettyPrint();
    outputFormat.setEncoding("utf-8");

    //更新xml文件
    XMLWriter writer = new XMLWriter(
        new FileOutputStream(new File("src/student.xml")), outputFormat);
    writer.write(document);
    writer.close();

}

删除XML

/**
     * 删除元素
     * @throws DocumentException
     * @throws IOException
     */
@Test
public void del() throws DocumentException, IOException {
    SAXReader reader = new SAXReader();
    Document document = reader.read(new File("src/student.xml"));
    // 找到要删除的元素
    Element stu = document.getRootElement().elements("student").get(2);
    // 删除元素
    stu.getParent().remove(stu);
    // 更新XML
    OutputFormat outputFormat = OutputFormat.createPrettyPrint();
    outputFormat.setEncoding("utf-8");

    //更新xml文件
    XMLWriter writer = new XMLWriter(
        new FileOutputStream(new File("src/student.xml")), outputFormat);
    writer.write(document);
    writer.close();
}

更新XML

/**
     * 更新
     * @throws DocumentException
     * @throws IOException
     */
@Test
public void update() throws DocumentException, IOException {
    SAXReader reader = new SAXReader();
    Document document = reader.read(new File("src/student.xml"));
    // 找到要修改的元素
    Element stu = document.getRootElement().elements("student").get(1);
    Element age = stu.element("age");
    age.setText((Integer.parseInt(age.getText())+20)+"");
    // 更新XML
    OutputFormat outputFormat = OutputFormat.createPrettyPrint();
    outputFormat.setEncoding("utf-8");

    //更新xml文件
    XMLWriter writer = new XMLWriter(
        new FileOutputStream(new File("src/student.xml")), outputFormat);
    writer.write(document);
    writer.close();

}

标签:XML,xml,应用,说明,student,new,newStu,document
From: https://www.cnblogs.com/qy-blog/p/17988585

相关文章

  • Vue中JSON文件神奇应用fetch、axios异步加载与模块导入全指南
     在Vue中使用JSON文件有多种方式,包括使用fetch方法加载JSON文件、使用axios库加载JSON文件,以及将JSON文件导入为模块。以下是详细描述和相应的示例代码:1.使用fetch方法加载JSON文件:步骤:创建一个JSON文件,例如 data.json://data.json{"name":"John","age":......
  • runc网络与systemd管理runc应用
    1.创建网络命名空间ipnetnsadd<ns>#ns是自定义网络空间名#例如:ipnetnsaddhaproxy#创建一个给haproxy使用的网络命名空间#新增一个网络空间会在/var/run/netns/目录下生成和网络空间同名的文件2.创建虚拟网络设备对iplinkadd<vname1>typevethpeer......
  • SHA加密在实际应用中的优势与局限
    SHA加密算法简介SHA(SecureHashAlgorithm)加密算法是一种单向加密算法,常用于加密数据的完整性校验和加密签名。它是由美国国家安全局(NSA)设计并广泛应用于各种安全场景。SHA加密算法具有较高的安全性和可靠性,但其主要缺点是密钥长度较短,容易受到量子计算等未来技术的威胁。......
  • 【树】二叉树的应用 I
    目录1.题目2.应用2.1.Leetcode124.二叉树中的最大路径和2.1.1.题目2.1.2.解题思路2.1.3.代码实现1.题目二叉树相关的题目:序号题目难度1124.二叉树中的最大路径和困难22.应用2.1.Leetcode124.二叉树中的最大路径和2.1.1.题目124.二叉树......
  • 工具类型的项目减少dll_pdb_xml文件的方法
    减少dll文件的数量dll文件是项目中使用到的NuGet包,首先需要去除没有使用的NuGet包。(目前暂无很好的解决方案)然后在NuGet包管理器中为解决方案添加Costura.Fody,根据项目环境选择对应的Costura.Fody版本,再次编译即可将源dll合并到目标exe中。 减少xml和pdb文件的数量用记......
  • windows程序设计---使用c语言开发windows桌面应用程序
     消息机制--队列消息(常规消息鼠标,键盘等等,经过消息循环)GetMessage()得到消息--从消息队列中检索,DispatchMessage()分发消息消息机制----非对列消息-----调用特定windows程序函数触发的消息如:CreateWindow()函数被调用则发送WM_PAINT消息   windows窗口,非客户区是无......
  • 研运干货|平台工程、应用可观测性趋势下,质量管理的应对之策
    “为变化做好准备。”这是当下对所有人的一句很重要的话,尤其是对于处在高速迭代与日新月异的技术工程领域的我们。最近,Gartner在2023十大技术趋势的报告中提到了平台工程(Platform Engineering)和应用可观测性(Applied Observability)。 本文将通过对这两大战略性技术趋势点的进行剖......
  • 视频监控方案设计:EasyCVR视频智能监管系统方案技术特点与应用
    随着科技的发展,视频监控平台在各个领域的应用越来越广泛。然而,当前的视频监控平台仍存在一些问题,如视频质量不高、监控范围有限、智能化程度不够等。这些问题不仅影响了监控效果,也制约了视频监控平台的发展。为了解决这些问题,TSINGSEE青犀推出的视频汇聚管理EasyCVR视频监控平台......
  • 行业应用 | Sophon AutoCV推动AI应用从模型生产到高效落地
    随着技术市场和应用方向的逐渐成熟,人工智能与各行各业的结合和落地逐渐进入了深水区。虽然由于行业规模化和应用普及度的限制,人工智能在“传统”行业的落地不如消费互联网行业,但是借助人工智能为“传统”行业的发展注入新能量一直是相关从业者探索的方向和创造数据价值的重要途径。......
  • 高效、易用、精准 | 三维天地智能试剂管理平台在实验室中的应用
    在当前实验室管理阶段,关于试剂耗材管理方面,存在以下几个关键性问题:一是试剂耗材管理缺乏规范性,二是试剂耗材台账信息模糊不清,三是库存管理存在精确度不足,四是位置定位及查找困难。针对所述问题,致力于实验室数智化建设的北京三维天地科技股份有限公司为实验室提供了一款高效......