`
cjh820425
  • 浏览: 155742 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

dom4j介绍与基本使用

阅读更多

介绍

 

dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的。dom4j是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件,可以在SourceForge上找到它。在IBM developerWorks上面可以找到一篇文章,对主流的Java XML API进行的性能、功能和易用性的评测,dom4j无论在那个方面都是非常出色的。如今你可以看到越来越多的Java软件都在使用dom4j来读写XML,特别值得一提的是连Sun的JAXM也在用dom4j。这是必须使用的jar包, Hibernate用它来读写配置文件。

 

概念

 

DOM4J是dom4j.org出品的一个开源XML解析包,它的网站中这样定义:

  Dom4j is an easy to use, open source library for working with XML, XPath and XSLT on the Java platform using the Java Collections Framework and with full support for DOM, SAX and JAXP.

  Dom4j是一个易用的、开源的库,用于XML,XPath和XSLT。它应用于Java平台,采用了Java集合框架并完全支持DOM,SAX和JAXP。

  DOM4J使用起来非常简单。只要你了解基本的XML-DOM模型,就能使用。然而他自己带的指南只有短短一页(html),不过说的到挺全。国内的中文资料很少。因而俺写这个短小的教程方便大家使用,这篇文章仅谈及基本的用法,如需深入的使用,请……自己摸索或查找别的资料。

  之前看过IBM developer社区的文章(参见附录),提到一些XML解析包的性能比较,其中DOM4J的性能非常出色,在多项测试中名列前茅。(事实上DOM4J的官方文档中也引用了这个比较)所以这次的项目中我采用了DOM4J作为XML解析工具。

  在国内比较流行的是使用JDOM作为解析器,两者各擅其长,但DOM4J最大的特色是使用大量的接口,这也是它被认为比JDOM灵活的主要原因。大师不是说过么,“面向接口编程”。目前使用DOM4J的已经越来越多。如果你善于使用JDOM,不妨继续用下去,只看看本篇文章作为了解与比较,如果你正要采用一种解析器,不如就用DOM4J吧。

  它的主要接口都在org.dom4j这个包里定义:

  Attribute Attribute定义了XML的属性

  Branch Branch为能够包含子节点的节点如XML元素(Element)和文档(Docuemnts)定义了一个公共的行为,

  CDATA CDATA 定义了XML CDATA 区域

  CharacterData CharacterData是一个标识借口,标识基于字符的节点。如CDATA,Comment, Text.

  Comment Comment 定义了XML注释的行为

  Document 定义了XML文档

  DocumentType DocumentType 定义XML DOCTYPE声明

  Element Element定义XML 元素

  ElementHandler ElementHandler定义了 Element 对象的处理器

  ElementPath 被 ElementHandler 使用,用于取得当前正在处理的路径层次信息

  Entity Entity定义 XML entity

  Node Node为所有的dom4j中XML节点定义了多态行为

  NodeFilter NodeFilter 定义了在dom4j节点中产生的一个滤镜或谓词的行为(predicate)

  ProcessingInstruction ProcessingInstruction 定义 XML 处理指令.

  Text Text 定义XML 文本节点.

  Visitor Visitor 用于实现Visitor模式.

  XPath XPath 在分析一个字符串后会提供一个XPath 表达式

  看名字大致就知道它们的涵义如何了。

  要想弄懂这套接口,关键的是要明白接口的继承关系:

  interface java.lang.Cloneable

  interface org.dom4j.Node

  interface org.dom4j.Attribute

  interface org.dom4j.Branch

  interface org.dom4j.Document

  interface org.dom4j.Element

  interface org.dom4j.CharacterData

  interface org.dom4j.CDATA

  interface org.dom4j.Comment

  interface org.dom4j.Text

  interface org.dom4j.DocumentType

  interface org.dom4j.Entity

  interface org.dom4j.ProcessingInstruction

  一目了然,很多事情都清楚了。大部分都是由Node继承来的。知道这些关系,将来写程序就不会出现ClassCastException了。

 

使用简介

 

下面给出一些例子(部分摘自DOM4J自带的文档),简单说一下如何使用。

1 读取并解析XML文档

  读写XML文档主要依赖于org.dom4j.io包,其中提供DOMReader和SAXReader两类不同方式,而调用方式是一样的。这就是依靠接口的好处。

  // 从文件读取XML,输入文件名,返回XML文档

  public Document read(String fileName) throws MalformedURLException, DocumentException {

  SAXReader reader = new SAXReader();

  Document document = reader.read(new File(fileName));

  return document;

  }

  其中,reader的read方法是重载的,可以从InputStream, File, Url等多种不同的源来读取。得到的Document对象就代表了整个XML。

  根据本人自己的经验,读取的字符编码是按照XML文件头定义的编码来转换。如果遇到乱码问题,注意要把各处的编码名称保持一致即可。

2 取得Root节点

  读取后的第二步,就是得到Root节点。熟悉XML的人都知道,一切XML分析都是从Root元素开始的。

  public Element getRootElement(Document doc){

  return doc.getRootElement();

  }

3 遍历XML树

  DOM4J提供至少3种遍历节点的方法:

  1) 枚举(Iterator)

  // 枚举所有子节点

  for ( Iterator i = root.elementIterator(); i.hasNext(); ) {

  Element element = (Element) i.next();

  // do something

  }

  // 枚举名称为foo的节点

  for ( Iterator i = root.elementIterator(foo); i.hasNext();) {

  Element foo = (Element) i.next();

  // do something

  }

  // 枚举属性

  for ( Iterator i = root.attributeIterator(); i.hasNext(); ) {

  Attribute attribute = (Attribute) i.next();

  // do something

  }

  2)递归

  递归也可以采用Iterator作为枚举手段,但文档中提供了另外的做法

  public void treeWalk() {

  treeWalk(getRootElement());

  }

  public void treeWalk(Element element) {

  for (int i = 0, size = element.nodeCount(); i < size; i++) {

  Node node = element.node(i);

  if (node instanceof Element) {

  treeWalk((Element) node);

  } else { // do something....

  }

  }

  }

  3) Visitor模式

  最令人兴奋的是DOM4J对Visitor的支持,这样可以大大缩减代码量,并且清楚易懂。了解设计模式的人都知道,Visitor是GOF设计模式之一。其主要原理就是两种类互相保有对方的引用,并且一种作为Visitor去访问许多Visitable。我们来看DOM4J中的Visitor模式(快速文档中没有提供)

  只需要自定一个类实现Visitor接口即可。

  public class MyVisitor extends VisitorSupport {

  public void visit(Element element){

  System.out.println(element.getName());

  }

  public void visit(Attribute attr){

  System.out.println(attr.getName());

  }

  }

  调用: root.accept(new MyVisitor())

  Visitor接口提供多种Visit()的重载,根据XML不同的对象,将采用不同的方式来访问。上面是给出的Element和Attribute的简单实现,一般比较常用的就是这两个。VisitorSupport是DOM4J提供的默认适配器,Visitor接口的Default Adapter模式,这个模式给出了各种visit(*)的空实现,以便简化代码。

  注意,这个Visitor是自动遍历所有子节点的。如果是root.accept(MyVisitor),将遍历子节点。我第一次用的时候,认为是需要自己遍历,便在递归中调用Visitor,结果可想而知。

4 XPath支持

  DOM4J对XPath有良好的支持,如访问一个节点,可直接用XPath选择。

  public void bar(Document document) {

  List list = document.selectNodes( //foo/bar );

  Node node = document.selectSingleNode(//foo/bar/author);

  String name = node.valueOf( @name );

  }

  例如,如果你想查找XHTML文档中所有的超链接,下面的代码可以实现:

  public void findLinks(Document document) throws DocumentException {

  List list = document.selectNodes( //a/@href );

  for (Iterator iter = list.iterator(); iter.hasNext(); ) {

  Attribute attribute = (Attribute) iter.next();

  String url = attribute.getValue();

  }

  }

5 字符串与XML的转换

  有时候经常要用到字符串转换为XML或反之,

  // XML转字符串

  Document document = ...;

  String text = document.asXML();

  // 字符串转XML

  String text = <name>James</name> </person>;

  Document document = DocumentHelper.parseText(text);

6 用XSLT转换XML

  public Document styleDocument(

  Document document,

  String stylesheet

  ) throws Exception {

  // load the transformer using JAXP

  TransformerFactory factory = TransformerFactory.newInstance();

  Transformer transformer = factory.newTransformer(

  new StreamSource( stylesheet )

  );

  // now lets style the given document

  DocumentSource source = new DocumentSource( document );

  DocumentResult result = new DocumentResult();

  transformer.transform( source, result );

  // return the transformed document

  Document transformedDoc = result.getDocument();

  return transformedDoc;

  }

7  创建XML

  一般创建XML是写文件前的工作,这就像StringBuffer一样容易。

  public Document createDocument() {

  Document document = DocumentHelper.createDocument();

  Element root = document.addElement(root);

  Element author1 =

  root

  .addElement(author)

  .addAttribute(name, James)

  .addAttribute(location, UK)

  .addText(James Strachan);

  Element author2 =

  root

  .addElement(author)

  .addAttribute(name, Bob)

  .addAttribute(location, US)

  .addText(Bob McWhirter);

  return document;

  }

8 文件输出

  一个简单的输出方法是将一个Document或任何的Node通过write方法输出

  FileWriter out = new FileWriter( foo.xml );

  document.write(out);

  如果你想改变输出的格式,比如美化输出或缩减格式,可以用XMLWriter类

  public void write(Document document) throws IOException {

  // 指定文件

  XMLWriter writer = new XMLWriter(

  new FileWriter( output.xml )

  );

  writer.write( document );

  writer.close();

  // 美化格式

  OutputFormat format = OutputFormat.createPrettyPrint();

  writer = new XMLWriter( System.out, format );

  writer.write( document );

  // 缩减格式

  format = OutputFormat.createCompactFormat();

  writer = new XMLWriter( System.out, format );

  writer.write( document );

  }

  如何,DOM4J够简单吧,当然,还有一些复杂的应用没有提到,如ElementHandler等。如果你动心了,那就一起来用DOM4J.

 

使用介绍2

本文主要讨论了用dom4j解析XML的基础问题,包括建立XML文档,添加、修改、删除节点,以及格式化(美化)输出和中文问题。可作为dom4j的入门资料。

1. 下载与安装

  dom4j是sourceforge.net上的一个开源项目,主要用于对XML的解析。从2001年7月发布第一版以来,已陆续推出多个版本,目前最高版本为1.5。

  dom4j专门针对Java开发,使用起来非常简单、直观,在Java界,dom4j正迅速普及。

  可以到http://sourceforge.net/projects/dom4j下载其最新版。

  dom4j1.5的完整版大约13M,是一个名为dom4j-1.5.zip的压缩包,解压后有一个dom4j-1.5.jar文件,这就是应用时需要引入的类包,另外还有一个jaxen-1.1-beta-4.jar文件,一般也需要引入,否则执行时可能抛java.lang.NoClassDefFoundError: org/jaxen/JaxenException异常,其他的包可以选择用之。

2. 示例XML文档(holen.xml)

  为了述说方便,先看一个XML文档,之后的操作均以此文档为基础。

  holen.xml

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

  <books>

  <!--This is a test for dom4j, holen, 2004.9.11-->

  <book show="yes">

  <title>Dom4j Tutorials</title>

  </book>

  <book show="yes">

  <title>Lucene Studing</title>

  </book>

  <book show="no">

  <title>Lucene in Action</title>

  </book>

  <owner>O'Reilly</owner>

  </books>

  这是一个很简单的XML文档,场景是一个网上书店,有很多书,每本书有两个属性,一个是书名,一个为是否展示[show],最后还有一项是这些书的拥有者[owner]信息。

3. 建立一个XML文档

  /**

  * 建立一个XML文档,文档名由输入属性决定

  * @param filename 需建立的文件名

  * @return 返回操作结果, 0表失败, 1表成功

  */

  public int createXMLFile(String filename){

  /** 返回操作结果, 0表失败, 1表成功 */

  int returnValue = 0;

  /** 建立document对象 */

  Document document = DocumentHelper.createDocument();

  /** 建立XML文档的根books */

  Element booksElement = document.addElement("books");

  /** 加入一行注释 */

  booksElement.addComment("This is a test for dom4j, holen, 2004.9.11");

  /** 加入第一个book节点 */

  Element bookElement = booksElement.addElement("book");

  /** 加入show属性内容 */

  bookElement.addAttribute("show","yes");

  /** 加入title节点 */

  Element titleElement = bookElement.addElement("title");

  /** 为title设置内容 */

  titleElement.setText("Dom4j Tutorials");

  /** 类似的完成后两个book */

  bookElement = booksElement.addElement("book");

  bookElement.addAttribute("show","yes");

  titleElement = bookElement.addElement("title");

  titleElement.setText("Lucene Studing");

  bookElement = booksElement.addElement("book");

  bookElement.addAttribute("show","no");

  titleElement = bookElement.addElement("title");

  titleElement.setText("Lucene in Action");

  /** 加入owner节点 */

  Element ownerElement = booksElement.addElement("owner");

  ownerElement.setText("O'Reilly");

  try{

  /** 将document中的内容写入文件中 */

  XMLWriter writer = new XMLWriter(new FileWriter(new File(filename)));

  writer.write(document);

  writer.close();

  /** 执行成功,需返回1 */

  returnValue = 1;

  }catch(Exception ex){

  ex.printStackTrace();

  }

  return returnValue;

  }

  说明:

  Document document = DocumentHelper.createDocument();

  通过这句定义一个XML文档对象

  Element booksElement = document.addElement("books");

  通过这句定义一个XML元素,这里添加的是根节点。

  Element有几个重要的方法:

  l addComment:添加注释

  l addAttribute:添加属性

  l addElement:添加子元素

  最后通过XMLWriter生成物理文件,默认生成的XML文件排版格式比较乱,可以通过OutputFormat类的createCompactFormat()方法或createPrettyPrint()方法格式化输出,默认采用createCompactFormat()方法,显示比较紧凑,这点将在后面详细谈到。

  生成后的holen.xml文件内容如下:

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

  <books><!--This is a test for dom4j, holen, 2004.9.11--><book show="yes"><title>Dom4j Tutorials</title></book><book show="yes"><title>Lucene Studing</title></book><book show="no"><title>Lucene in Action</title></book><owner>O'Reilly</owner></books>

4. 修改XML文档

  有三项修改任务,依次为:

  l 如果book节点中show属性的内容为yes,则修改成no

  l 把owner项内容改为Tshinghua,并添加date节点

  l 若title内容为Dom4j Tutorials,则删除该节点

  /**

  * 修改XML文件中内容,并另存为一个新文件

  * 重点掌握dom4j中如何添加节点,修改节点,删除节点

  * @param filename 修改对象文件

  * @param newfilename 修改后另存为该文件

  * @return 返回操作结果, 0表失败, 1表成功

  */

  public int ModiXMLFile(String filename,String newfilename){

  int returnValue = 0;

  try{

  SAXReader saxReader = new SAXReader();

  Document document = saxReader.read(new File(filename));

  /** 修改内容之一: 如果book节点中show属性的内容为yes,则修改成no */

  /** 先用xpath查找对象 */

  List list = document.selectNodes("/books/book/@show" );

  Iterator iter = list.iterator();

  while(iter.hasNext()){

  Attribute attribute = (Attribute)iter.next();

  if(attribute.getValue().equals("yes")){

  attribute.setValue("no");

  }

  }

  /**

  * 修改内容之二: 把owner项内容改为Tshinghua

  * 并在owner节点中加入date节点,date节点的内容为2004-09-11,还为date节点添加一个属性type

  */

  list = document.selectNodes("/books/owner" );

  iter = list.iterator();

  if(iter.hasNext()){

  Element ownerElement = (Element)iter.next();

  ownerElement.setText("Tshinghua");

  Element dateElement = ownerElement.addElement("date");

  dateElement.setText("2004-09-11");

  dateElement.addAttribute("type","Gregorian calendar");

  }

  /** 修改内容之三: 若title内容为Dom4j Tutorials,则删除该节点 */

  list = document.selectNodes("/books/book");

  iter = list.iterator();

  while(iter.hasNext()){

  Element bookElement = (Element)iter.next();

  Iterator iterator = bookElement.elementIterator("title");

  while(iterator.hasNext()){

  Element titleElement=(Element)iterator.next();

  if(titleElement.getText().equals("Dom4j Tutorials")){

  bookElement.remove(titleElement);

  }

  }

  }

  try{

  /** 将document中的内容写入文件中 */

  XMLWriter writer = new XMLWriter(new FileWriter(new File(newfilename)));

  writer.write(document);

  writer.close();

  /** 执行成功,需返回1 */

  returnValue = 1;

  }catch(Exception ex){

  ex.printStackTrace();

  }

  }catch(Exception ex){

  ex.printStackTrace();

  }

  return returnValue;

  }

  说明:

  List list = document.selectNodes("/books/book/@show" );

  list = document.selectNodes("/books/book");

  上述代码通过xpath查找到相应内容。

  通过setValue()、setText()修改节点内容。

  通过remove()删除节点或属性。

5. 格式化输出和指定编码

  默认的输出方式为紧凑方式,默认编码为UTF-8,但对于我们的应用而言,一般都要用到中文,并且希望显示时按自动缩进的方式的显示,这就需用到OutputFormat类。

  /**

  * 格式化XML文档,并解决中文问题

  * @param filename

  * @return

  */

  public int formatXMLFile(String filename){

  int returnValue = 0;

  try{

  SAXReader saxReader = new SAXReader();

  Document document = saxReader.read(new File(filename));

  XMLWriter writer = null;

  /** 格式化输出,类型IE浏览一样 */

  OutputFormat format = OutputFormat.createPrettyPrint();

  /** 指定XML编码 */

  format.setEncoding("GBK");

  writer= new XMLWriter(new OutputStreamWriter(new FileOutputStream("filename"),format.getEncoding()),format);

  writer.write(document);

  writer.close();

  /** 执行成功,需返回1 */

  returnValue = 1;

  }catch(Exception ex){

  ex.printStackTrace();

  }

  return returnValue;

  }

  说明:

  OutputFormat format = OutputFormat.createPrettyPrint();

  这句指定了格式化的方式为缩进式,则非紧凑式。

  format.setEncoding("GBK");

  指定编码为GBK。

  XMLWriter writer = new XMLWriter(new FileWriter(new File(filename)),format);

  这与前面两个方法相比,多加了一个OutputFormat对象,用于指定显示和编码方式。

分享到:
评论

相关推荐

    基于智能温度监测系统设计.doc

    基于智能温度监测系统设计.doc

    搜广推推荐系统中传统推荐系统方法思维导图整理-完整版

    包括userCF,itemCF,MF,LR,POLY2,FM,FFM,GBDT+LR,阿里LS-PLM 基于深度学习推荐系统(王喆)

    2023-04-06-项目笔记 - 第三百五十五阶段 - 4.4.2.353全局变量的作用域-353 -2025.12.22

    2023-04-06-项目笔记-第三百五十五阶段-课前小分享_小分享1.坚持提交gitee 小分享2.作业中提交代码 小分享3.写代码注意代码风格 4.3.1变量的使用 4.4变量的作用域与生命周期 4.4.1局部变量的作用域 4.4.2全局变量的作用域 4.4.2.1全局变量的作用域_1 4.4.2.353局变量的作用域_353- 2024-12-22

    和美乡村城乡融合发展数字化解决方案.docx

    和美乡村城乡融合发展数字化解决方案.docx

    CNN基于Python的深度学习图像识别系统

    基于Python的深度学习图像识别系统是一个利用卷积神经网络(CNN)对图像进行分类的先进项目。该项目使用Python的深度学习库,如TensorFlow,构建和训练一个模型,能够自动识别和分类图像中的对象。系统特别适合于图像处理领域的研究和实践,如计算机视觉、自动驾驶、医疗影像分析等。 项目的核心功能包括数据预处理、模型构建、训练、评估和预测。用户可以上传自己的图像或使用预定义的数据集进行训练。系统提供了一个直观的界面,允许用户监控训练进度,并可视化模型的性能。此外,系统还包括了一个模型优化模块,通过调整超参数和网络结构来提高识别准确率。 技术层面上,该项目使用了Python编程语言,并集成了多个流行的机器学习库,如NumPy、Pandas、Matplotlib等,用于数据处理和可视化。模型训练过程中,系统会保存训练好的权重,以便后续进行模型评估和预测。用户可以通过简单的API调用,将新的图像输入到训练好的模型中,获取预测结果。

    拳皇97.exe拳皇972.exe拳皇973.exe

    拳皇97.exe拳皇972.exe拳皇973.exe

    基于python和协同过滤算法的电影推荐系统

    基于python和协同过滤算法的电影推荐系统 基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法

    DEV-CPP-RED-PANDA

    DEV-CPP-RED-PANDA

    Python语言求解旅行商(TSP)问题,算法包括禁忌搜索、蚁群算法、模拟退火算法等

    Python语言求解旅行商问题,算法包括禁忌搜索、蚁群算法、模拟退火算法等。

    pdfjs2.5.207和4.9.155

    pdfjs 用于在浏览器中查看/预览/打印pdf。 pdfjs 2.5.207 支持firefox/chrome/edge/ie11以上版本。 如果需要支持旧版本浏览器,可以使用这个,是未修改过的原版,支持打印和下载按钮。亲测有效。 pdf 4.9.155分两个包: pdfjs-4.9.155-dist.zip pdfjs-4.9.155-legacy-dist.zip

    建设项目现场高温人员中暑事故应急预案.docx

    建设项目现场高温人员中暑事故应急预案

    数据结构上机实验大作业-线性表选题.zip

    数据结构上机实验大作业-线性表选题.zip

    基于高德地图的校园导航全部资料+详细文档+高分项目.zip

    【资源说明】 基于高德地图的校园导航全部资料+详细文档+高分项目.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

    全自动批量建站快速养权重站系统【纯静态html站群版】:(GPT4.0自动根据关键词写文章+自动发布+自定义友链+自动文章内链+20%页面加提权词)

    【静态站群程序视频演示,只有视频,不含程序,下载须知】【静态站群程序视频演示,只有视频,不含程序,下载须知】全自动批量建站快速养权重站系统【纯静态html站群版】:(GPT4.0自动根据关键词写文章+自动发布+自定义友链+自动文章内链+20%页面加提权词)

    9.30 SWKJ 男头7张+女头2张.zip

    9.30 SWKJ 男头7张+女头2张.zip

    基于java+springboot+vue+mysql的技术交流和分享平台 源码+数据库+论文(高分毕业设计).zip

    项目已获导师指导并通过的高分毕业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行!可以放心下载 技术组成 语言:java 开发环境:idea、vscode 数据库:MySql5.7以上 部署环境:maven 数据库工具:navicat

    一个通过单片机在各种屏幕上显示中文的解决方案.7z

    一个通过单片机在各种屏幕上显示中文的解决方案.7z

    Halcon模板匹配图像包

    图像

    线上辅导班系统-JAVA-基于springboot的线上辅导班系统的开发与设计(毕业论文)

    一、用户管理功能 用户注册与登录 学生注册:学生可以通过手机号、邮箱、社交账号等方式注册,填写个人信息(如姓名、年龄、学校等)。 家长/监护人账户:支持家长/监护人注册并管理学生账户,查看学习进度和成绩。 教师账户:教师可以注册并设置个人资料,上传资质认证文件。 管理员账户:管理员负责整个系统的管理,包括用户管理、课程管理、平台设置等。 用户权限管理 角色权限:系统根据用户类型(学生、家长、教师、管理员)分配不同权限,确保信息安全。 家长监督:家长可以查看子女的学习进度、成绩和教师反馈,参与学习监督。 个人资料管理 用户可以在个人中心更新基本信息,设置个人头像、联系方式、密码等。 支持学籍信息的维护,例如学生的年级、班级、课程历史等。 二、课程管理功能 课程设置 课程创建与编辑:教师或管理员可以创建和编辑课程内容,上传课件、视频、文档等教学材料。 课程分类:根据学科、年级、难度等维度进行课程分类,方便学生浏览和选择。 课程排课:管理员可以设置课程的时间表、教学内容和授课教师,并调整上课时间和频率。 课程安排与通知 课程预约:学生可以在线选择并预约感兴趣的课程,系统根据学生的时

    英特尔2021-2024年网络连接性和IPU路线图

    内容概要:本文档介绍了英特尔2021年至2024年的网络连接性产品和智能处理单元(IPU)的战略和技术路线图。涵盖了从10GbE到200GbE的不同系列以太网适配器的特性、性能和发布时间。详细列出了各个产品的关键功能,如PCIe接口、安全特性、RDMA支持等。同时,介绍了IPU的发展计划,包括200G、400G和800G的不同代次产品的性能提升和新的功能特点。 适合人群:从事网络工程、数据中心管理、IT架构设计的专业技术人员。 使用场景及目标:本文档主要用于了解英特尔未来几年在以太网适配器和IPU领域的技术和产品规划,帮助企业在采购和部署网络设备时做出决策。同时,为研究人员提供最新技术发展趋势的参考。 其他说明:文档内容涉及的技术细节和时间表可能会有变动,请以英特尔官方发布的最新信息为准。

Global site tag (gtag.js) - Google Analytics