5-XML扩展标记语言

什么是XML

XML:eXtensible Markup Language 可扩展标记语言

  • 可扩展:所有标签都是自定义的
  • 功能:数据存储、配置文件、数据传输
  • xml和html区别:

html语法松散,xml语法严格
html做页面展示,xml做数据存储
html所有标签都是预定义的,xml都是自定义的

XML语法

<?xml version="1.0" encoding="UTF-8"?>
<!-- 文档声明,必须写在第一行-->

	<!-- 
		version ="版本号"
		encoding ="字符集"
	-->

<!-- 
	注释可以出现在除标签内部以为的任何位置。注释不能嵌套!
-->
	 
<!-- 元素的写法 -->
	<!-- 
		1、文档中有且只有一个根元素
		2、元素需要正确闭合
		3、元素必须正确嵌套
		4、元素的命名规范
			区分大小写、不能以数字或xml开头、不能包含空格
	 -->

<!-- 文档解析
	jaxp sun公司开发(但自己都不用)
	jdom 开源组织开发的
	dom4j 开源组织,sun也用
		jdom的升级产品
		DOM4j的使用:参考Dom4j.java
		
 -->
 
<!-- 根元素,有且只有一个 -->
<persons><!-- 头标签 -->
	<!-- 子元素
		 属性必须用引号,单引双引都可以
	-->
	<person id='p1'>
		<name>张三</name>
		<age>11</age>
	</person>
	<person id="p2">
		<!-- 文本
			转义字符:&开头;结尾 
			<![CDATA[文本]]>
		 -->
		<name>李四<![CDATA[if(a>b&&a<c)]]></name>
		<age>&lt;&amp;</age>
	</person>
</persons><!-- 尾标签 -->

XML解析JAVA技术介绍

1、DOM Document Object Model 文档对象模型
关键字:树(Document)
优点:把XML文件在内存中构造树形结构,可以遍历和修改
缺点:如果文件较大,内存有压力,解析的时间会比较长

2、SAX Simple API for XML 基于XML的简单API
关键字:流(Stream)
把XML作为输入流,触法标记开始,内容开始,标记结束等
优点:解析可以立即开始,速度快,没有内存压力
缺点:不能对节点做修改

3、JDOM/DOM4J
DOM4J结合了DOM和SAX两种解析方式的优点

基于DOM4J操作XML

package com.offcn.xml;

import java.util.List;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.jupiter.api.Test;

/**
 * DOM4j的使用
 * 使用需导入jar包
 * 	DOM4J:dom4j-1.6.1.jar
 */
public class Dom4j {
	
	@Test
	public void run1() throws Exception {
		//解析XML
		//0、创建解析XML的核心对象
		SAXReader reader = new SAXReader();
		//0、读取加载需要解析的xml
		Document document = reader.read("src/com/offcn/xml/Demo1.xml");
		
		//1、获取xml中的根元素
		Element rootElement = document.getRootElement();
		//getName()获取标签名
//		System.out.println(rootElement.getName());
		
		//2、获取根元素下的所有子元素
		List<Element> list = rootElement.elements();
//		for (Element e : list) {
//			System.out.println(e.getName());
//		}
		
		//3、获取元素的属性值
		Element p1 = list.get(0);//第一个person元素
		//3.1、p1.attribute("id").getValue()
		//attribute取到的是整个属性
		Attribute attribute = p1.attribute("id");
//		System.out.println(attribute);
		//attribute.getValue()取到属性对应的值
		String value = attribute.getValue();
//		System.out.println(value);
		
		//3.2、直接通过元素获取当前的值
		String attributeValue = p1.attributeValue("id");
//		System.out.println(attributeValue);
		
//		System.out.println("-----------------------------------");
		
		//4、获取指定元素下的子元素
		Element pname = p1.element("name");//第一个person元素下的name元素
//		System.out.println(pname);
		//获取标签的标签名
//		System.out.println(pname.getName());
		
		//5、获取元素内的文本
//		System.out.println(pname.getText());
		
		//5.1获取指定元素下的子元素的文本
//		System.out.println(p1.elementText("age"));
		
	}
}

XPath操作XML

package com.offcn.xml;

import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
import org.junit.jupiter.api.Test;

/**
 * XPath
 * 基于Dom4j的免费工具
 * 
 * 使用需导入jar包
 * 	DOM4J:dom4j-1.6.1.jar
 * 	XPath:jaxen-1.1-beta-6.jar
 * 
 * 简化DOM4J的操作,定位更准确
 *
 * 可参考本机G:\offcn\API\API-JavaEE\WEB\XPathTutorial实例教程
 */
public class XPath {

	@Test
	public void run1() throws Exception {
		
		//0、创建解析XML的核心对象
		SAXReader reader = new SAXReader();
		//0、将XML文件加载到内存中
		Document document = reader.read("src/com/offcn/xml/demo1.xml");
		
		//1、获取节点对象
		
		//1.1、获取单节点对象
		Node node = document.selectSingleNode("/persons/person/name");
		System.out.println(node.getText());
		
		//1.2、获取多节点对象
		List<Node> nodes = document.selectNodes("//*");
		for (Node n : nodes) {
			System.out.println(n.getName()+" "+n.getText());
		}
		
		
	}
	
	@Test
	public void run2() throws Exception {
		
		//0、创建解析XML的核心对象
		SAXReader reader = new SAXReader();
		//0、将XML文件加载到内存中
		Document document = reader.read("src/com/offcn/xml/demo1.xml");
		
		//
		List<Node> nodes = document.selectNodes("//*[@id='p2']/name");
		for (Node n : nodes) {
			System.out.println(n.getName()+" "+n.getText());
		}
	}
}

【使用教程】 一、环境配置 1、建议下载anaconda和pycharm 在anaconda中配置好环境,然后直接导入到pycharm中,在pycharm中运行项目 anaconda和pycharm安装及环境配置参考网上博客,有很多博主介绍 2、在anacodna中安装requirements.txt中的软件包 命令为:pip install -r requirements.txt 或者改成清华源后再执行以上命令,这样安装要快一些 软件包都安装成功后才算成功 3、安装好软件包后,把anaconda中对应的python导入到pycharm中即可(不难,参考网上博客) 二、环境配置好后,开始训练(也可以训练自己数据集) 1、数据集准备 需要准备yolo格式的目标检测数据集,如果不清楚yolo数据集格式,或者有其他数据训练需求,请看博主yolo格式各种数据集集合链接:https://blog.csdn.net/DeepLearning_/article/details/127276492 里面涵盖了上百种yolo数据集,且在不断更新,基本都是实际项目使用。来自于网上收集、实际场景采集制作等,自己使用labelimg标注工具标注的。数据集质量绝对有保证! 本项目所使用的数据集,见csdn该资源下载页面中的介绍栏,里面有对应的下载链接,下载后可直接使用。 2、数据准备好,开始修改配置文件 参考代码中data文件夹下的banana_ripe.yaml,可以自己新建一个不同名称的yaml文件 train:训练集的图片路径 val:验证集的图片路径 names: 0: very-ripe 类别1 1: immature 类别2 2: mid-ripe 类别3 格式按照banana_ripe.yaml照葫芦画瓢就行,不需要过多参考网上的 3、修改train_dual.py中的配置参数,开始训练模型 方式一: 修改点: a.--weights参数,填入'yolov9-s.pt',博主训练的是yolov9-s,根据自己需求可自定义 b.--cfg参数,填入 models/detect/yolov9-c.yaml c.--data参数,填入data/banana_ripe.yaml,可自定义自己的yaml路径 d.--hyp参数,填入hyp.scratch-high.yaml e.--epochs参数,填入100或者200都行,根据自己的数据集可改 f.--batch-size参数,根据自己的电脑性能(显存大小)自定义修改 g.--device参数,一张显卡的话,就填0。没显卡,使用cpu训练,就填cpu h.--close-mosaic参数,填入15 以上修改好,直接pycharm中运行train_dual.py开始训练 方式二: 命令行方式,在pycharm中的终端窗口输入如下命令,可根据自己情况修改参数 官方示例:python train_dual.py --workers 8 --device 0 --batch 16 --data data/coco.yaml --img 640 --cfg models/detect/yolov9-c.yaml --weights '' --name yolov9-c --hyp hyp.scratch-high.yaml --min-items 0 --epochs 500 --close-mosaic 15 训练完会在runs/train文件下生成对应的训练文件及模型,后续测试可以拿来用。 三、测试 1、训练完,测试 修改detect_dual.py中的参数 --weights,改成上面训练得到的best.pt对应的路径 --source,需要测试的数据图片存放的位置,代码中的test_imgs --conf-thres,置信度阈值,自定义修改 --iou-thres,iou阈值,自定义修改 其他默认即可 pycharm中运行detect_dual.py 在runs/detect文件夹下存放检测结果图片或者视频 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值