博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java的进阶学习-第一章:xml技术
阅读量:2121 次
发布时间:2019-04-30

本文共 4683 字,大约阅读时间需要 15 分钟。

目录


一、XML的入门:

1.1 回顾:

HTML:超文本标记语言,负责页面的结构

CSS:层叠样式表,负责页面的表现

Js:负责页面的动作,实现页面与服务器(后端)的交互

XML:Extensible Markup Language,可扩展标记语言。

1.2 作用:

1、作为程序或者软件的配置文件(框架Struts2、Hibernate、Spring、SpringMVC、MyBatis,Apache Tomcat,Web Project中web.xml文件)

2、以文件的形式存储数据,可以通过html页面直接读取,或者使用java代码解析文件,相当于一个小型数据库。

二、XML的语法:

2.1 标签:

语法:<开始标签>标签体</结束标签>    <account>zhao</account>

1、所有标签必须由有开始和结束;

2、xml标签严格区分大小写,<s></s>和<S></S>属于不同的标签,<S></s>写法是错误的;

3、XML标签必须严格配对;

4、XML标签不能使用空格:<a b></a b>写法是错误的;

5、XML标签不能以数字开头;

6、在一个XML文档中,有且仅有一个根标签,遵循树形结构的约定。

2.2 属性:

<web-app version="3.0">...</web-app>

1、属性值必须使用双引号,双引号不能省略;(html中标签的属性值可以不使用双引号,一般建议使用双引号)

2、一个标签可以有多个属性,但是不能出现重复的属性。

2.3 文档的注释:

Java://     /*    */      /*    *    ...   */

Css:/*   */   //

Js://  /*   */

Html:<!--   -->

XML:<!--   -->

三、XML文件充当数据库:

3.1 html读取XML文件:

XMLHttpRequest 对象用于在后台与服务器交换数据。

3.1.1 安装和配置Tomcat服务器:

1、解压压缩包到本地(建议直接放在磁盘根目录,路径中不要出现中文和空格)

2、配置环境变量

TOMCAT_HOME——Tomcat的根目录(如D:\apache-tomcat-7.0.73)

CATALINA_HOME——Tomcat的根目录(如D:\apache-tomcat-7.0.73)

Path:追加<Tomcat的根目录\lib,Tomcat的根目录\bin>

         3、直接进入Tomcat的解压目录bin中,

 启动Tomcat

 关闭Tomcat

4、直接在浏览器使用http://localhost:8080/,如果能够见到Tomcat’的欢迎页面,表示配置成功。

注意:

(1)如果双击启动(或关闭)Tomcat出现闪退,打开startup.bat(或shutdown.bat),在第一行配置JAVA_HOME和CATALINA_HOME,如:

  1. Tomcat默认端口号是8080,如果需要修改端口号,打开conf/server.xml把8080改成新的端口号,保存文件,重新启动Tomcat服务器。

5、在MyEclipse中配置Tomcat

在window->preferences窗口,MyEclipse->Servers->Tomcat->Tomcat7配置根目录,保存即可。

3.1.2 读取XML文件内容显示在html:

<!DOCTYPE html>

<html>

  <head>

    <title>html读取xml文件的内容</title> 

    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">

    <meta http-equiv="description" content="this is my page">

    <meta http-equiv="content-type" content="text/html; charset=UTF-8">

  </head>

  <body>

    <script type="text/javascript">

       /* XMLHttpRequest 对象用于在后台与服务器交换数据。 */

       var xmlhttp = null;

       //创建XMLHttpRequest对象

       if(window.XMLHttpRequest){  //针对IE7+、FireFox、Chrome、Opera、Safari

           xmlhttp = new XMLHttpRequest();

       }else{    //针对IE5、IE6

           xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");

       }

       //读取xml文件

       xmlhttp.open("GET", "users.xml", false);  //准备发送请求

       xmlhttp.send(null);   //发送请求

       //xml文件的内容全部保存在xmlDoc对象当中

       var xmlDoc = xmlhttp.responseXML;

      

       //以table的形式展现xml文件的内容

       var users = xmlDoc.getElementsByTagName("user");

       document.write("<table border='1' cellspacing='0' cellpadding='0'>");

       for(var i=0;i<users.length;i++){

           document.write("<tr><td>");

           document.write(users[i].getElementsByTagName("account")[0].childNodes[0].nodeValue);

           document.write("</td><td>");

           document.write(users[i].getElementsByTagName("password")[0].childNodes[0].nodeValue);

           document.write("</td></tr>");

       }

       document.write("</table>");

       /*

           xmlDoc -由解析器创建的 XML 文档

           getElementsByTagName("account")[0] - 第一个 <account> 元素

           childNodes[0] - <account> 元素的第一个子元素(文本节点)

           nodeValue - 节点的值(文本本身)

       */

    </script>

  </body>

</html>

3.2 DOM4j解析xml文件:

3.2.1 原理:

把整个文档一次加载到内存,在内存中构建一个Document对象树,通过Document对象,得到对象树的根节点,再通过根节点访问(操作)xml文件中的内容。

3.2.2 实现过程:

1、导入dom4j的jar包;

2、编写一个xml文件;

3、定义一个类,与xml文件的内容对应;

4、定义一个类,专门读取xml文件并存储到List集合中

public class ReadContact {

    public List<Contact> read() {

       List<Contact> contacts = new ArrayList<Contact>();

       // 1.创建xml解析器对象

       SAXReader reader = new SAXReader();

       // 2.读取xml文件,返回Document对象

       Document document = null;

       try {

           document = reader.read(new File("src/contacts.xml"));

       } catch (DocumentException e) {

           e.printStackTrace();

       }

       // 3.读取document对象的根节点

       Element root = document.getRootElement();

       // 获取根节点中的全部子节点,类型是Iterator<Node>

       Iterator<Node> iterator = root.nodeIterator();

       while (iterator.hasNext()) {

           Node node = iterator.next();  // 获取指针当前指向的节点

           if (node instanceof Element) {   // 判断node对象是否是Element接口的一个实例

              Element element = (Element) node;

              String id = element.attributeValue("id");

              // System.out.println("id=" + id);

              Contact contact = new Contact(); // 创建一个Contact对象,保存从xml文件种读取到的数据

              contact.setId(Integer.parseInt(id));

              Iterator<Node> iterator2 = element.nodeIterator()// 读到了最里层的节点(叶子节点)组成迭代器

              while (iterator2.hasNext()) {

                  Node node2 = iterator2.next(); // 获取指针当前指向的节点(叶子节点)

                  String nodeName = node2.getName();  // 获取节点名称

                  if (node2 instanceof Element) { // 判断node2对象是否是Element接口的一个实例

                     Element element2 = (Element) node2;

                     String value = element2.getText();

                     // System.out.println("value:" + value);

                     if ("name".equals(nodeName)) {  // 说明当前读取到的value是name这个节点对应的值

                         contact.setName(value);

                     } else if ("age".equals(nodeName)) {

                         contact.setAge(Integer.parseInt(value));

                     } else if ("sex".equals(nodeName)) {

                         contact.setSex("1".equals(value) ? true : false);

                     } else if ("email".equals(nodeName)) {

                         contact.setEmail(value);

                     } else {

                         System.out.println("Error!");

                     }

                  }

              }

              contacts.add(contact);

           }

       }

       return contacts;

    }

}

3.2.3 重要方法:

Document  getRootElement()获取xml文档的根节点

Element  nodeIterator()获取当前节点下的全部字节点,返回迭代器

Element  attributeValue(String args)根据属性名获取属性值

Element  getText()获取当前元素中的文本内容。

转载地址:http://muyrf.baihongyu.com/

你可能感兴趣的文章
Leetcode C++《热题 Hot 100-28》19.删除链表的倒数第N个节点
查看>>
Leetcode C++《热题 Hot 100-29》22.括号生成
查看>>
Leetcode C++《热题 Hot 100-40》64.最小路径和
查看>>
Leetcode C++《热题 Hot 100-41》75.颜色分类
查看>>
Leetcode C++《热题 Hot 100-42》78.子集
查看>>
Leetcode C++《热题 Hot 100-43》94.二叉树的中序遍历
查看>>
Leetcode C++ 《第175场周赛-1 》5332.检查整数及其两倍数是否存在
查看>>
Leetcode C++ 《第175场周赛-2 》5333.制造字母异位词的最小步骤数
查看>>
Leetcode C++ 《第175场周赛-3》1348. 推文计数
查看>>
Leetcode C++《热题 Hot 100-44》102.二叉树的层次遍历
查看>>
Leetcode C++《热题 Hot 100-45》338.比特位计数
查看>>
读书摘要系列之《kubernetes权威指南·第四版》第一章:kubernetes入门
查看>>
Leetcode C++《热题 Hot 100-46》739.每日温度
查看>>
Leetcode C++《热题 Hot 100-47》236.二叉树的最近公共祖先
查看>>
Leetcode C++《热题 Hot 100-48》406.根据身高重建队列
查看>>
《kubernetes权威指南·第四版》第二章:kubernetes安装配置指南
查看>>
Leetcode C++《热题 Hot 100-49》399.除法求值
查看>>
Leetcode C++《热题 Hot 100-51》152. 乘积最大子序列
查看>>
[Kick Start 2020] Round A 1.Allocation
查看>>
Leetcode C++ 《第181场周赛-1》 5364. 按既定顺序创建目标数组
查看>>