目录
一、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,如:
- 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()获取当前元素中的文本内容。