• JSP教程:1天玩转JSP网站开发技术
  • JSP是什么?
  • JSP的特点与工作流程
  • JSP与ASP、PHP的比较
  • JSP页面的组成及其元素
  • JSP开发环境搭建(Tomcat的安装和配置)
  • 第一个JSP程序
  • JSP注释(多种注释详解)
  • JSP声明:变量、方法和类的声明
  • JSP中嵌入Java代码
  • JSP表达式
  • JSP开发模式(四种模式)
  • JSP常见错误以及解决方案
  • JSP指令详解(三大指令)
  • JSP page指令
  • JSP include指令
  • JSP指令应用实例
  • JSP动作
  • JSP include动作
  • JSP param动作
  • JSP forward动作
  • JSP plugin动作
  • JSP useBean动作
  • JSP setProperty动作
  • JSP getProperty动作
  • JSP application 对象
  • JSP out对象:向客户端输出数据
  • JSP request对象:获取客户端的请求信息
  • JSP response对象:响应客户端的请求并向客户端输出信息
  • JSP session对象
  • JSP pageContext对象
  • JSP page对象
  • JSP config对象
  • JSP获取并显示字符串长度
  • 什么是JavaBean?
  • JavaBean工具
  • JavaBean规范
  • JavaBean的属性(Simple、Indexed、Bound、Constrained)
  • JavaBean的Scope属性
  • JavaBean事件
  • JavaBean实现用户登录界面
  • Servlet是什么?
  • Servlet的生命周期
  • Servlet的类和方法
  • Servlet客户端跳转
  • EL是什么?(详解)
  • JSP EL表达式的基本语法及运算符的优先级(一览表)
  • JSP EL 点(.)运算符和下标([])运算符
  • JSP EL算数运算符
  • JSP EL关系运算符
  • JSP EL逻辑运算符
  • JSP EL条件运算符
  • JSP EL empty空运算符
  • EL表达式中的常量与变量
  • EL表达式的保留字
  • EL表达式的内置对象及其作用域
  • 使用EL表达式访问JavaBean
  • 使用EL表达式访问集合
  • EL表达式内置对象param和paramValues
  • EL表达式内置对象cookie
  • EL表达式内置对象initParam
  • JDBC 的定义及产品组件
  • 建立JDBC连接
  • 利用JDBC发送SQL语句
  • JDBC API ResultSet接口(记录集接口)
  • JDBC RowSet接口
  • JDBC BaseRowSet类和CachedRowSet类
  • 填充CachedRowSet对象记录集(三种方法)
  • File类(在JSP中的使用)详解
  • 使用字节流读/写文件
  • RandomAccessFile类
  • JSP文件上传
  • XML是什么?
  • XML的基本语法
  • JDK 中的 XML API
  • DOM解析XML
  • SAX解析XML
  • DOM4j解析XML
  • XML 结构是一种树型结构,处理步骤都差不多,Java 己经将它们封装成了现成的类库。目前流行的解析方法有三种,分别为 DOM、SAS 和 DOM4j。

    DOM(Document Object Model,文档对象模型)

    是 W3C 组织推荐的处理 XML 的一种方式。它是一种基于对象的 API,把 XML 的内容加载到内存中,生成一个 XML 文档相对应的对象模型,根据对象模型,以树节点的方式对文档进行操作。下面用实例说明解析步骤。

    【例 1】DOM 解析 XML 文件。

    假设 user.xml 文件如下:

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <users>
    3. <user country="中国">
    4. <name>白真</name>
    5. <english_name>baizhen</english_name>
    6. <age>32</age>
    7. <sex></sex>
    8. <address state="北京">
    9. <city>北京市</city>
    10. <area>朝阳区</area>
    11. </address>
    12. <description>他是一个大学老师</description>
    13. </user>
    14. <user country="中国">
    15. <name>李华华</name>
    16. <english_name>lihuahua</english_name>
    17. <age>30</age>
    18. <sex></sex>
    19. <address state="河北省">
    20. <city>石家庄市</city>
    21. <area>裕华区</area>
    22. </address>
    23. <description>她是一个律师</description>
    24. </user>
    25. </users>

    编写解析类 JAXBDomDemo.java 的代码如下:

    1. package com.eshore;
    2. import java.io.File;
    3. import java.io.IOException;
    4. import javax.xml.parsers.DocumentBuilder;
    5. import javax.xml.parsers.DocumentBuilderFactory;
    6. import javax.xml.parsers.ParserConfigurationException;
    7. import org.w3c.dom.Document;
    8. import org.w3c.dom.Element;
    9. import org.w3c.dom.Node;
    10. import org.w3c.dom.NodeList;
    11. import org.xml.sax.SAXException;
    12. public class JAXBDomDemo
    13. {
    14. /**
    15. *用dom解析XML文件
    16. */
    17. public static void main(String[] args)
    18. {
    19. //创建待解析的XML文件,并指定目标
    20. File file=new File("F:\\users.xml");
    21. //用单例模式创建DocumentBuilderFactory对象
    22. DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
    23. //声明一个DocumentBuilder对象
    24. DocumentBuilder documentBuilder =null;
    25. try
    26. {
    27. //通过DocumentBuilderFactory构建DocumentBuilder对象
    28. documentBuilder=factory.newDocumentBuilder();
    29. //DocumentBuilder解析xml文件
    30. Document document=documentBuilder.parse(file);
    31. //获得xml文档中的元素根元素
    32. Element root=document.getDocumentElement();
    33. //输出根元素的名称
    34. System.out.println("根元素:"+root.getNodeName());
    35. //获得根元素下的子节点
    36. NodeList childNodes = root.getChildNodes();
    37. //遍历根元素下的子节点
    38. for(int i=0;i<childNodes.getLength();i++)
    39. {
    40. //获得根元素下的子节点
    41. Node node=childNodes.item(i);
    42. System.out.println("节点的名称为"+node.getNodeName());
    43. //获得子节点的country属性值
    44. String attributeV=node.getAttributes().getNamedItem("country").getNodeValue();
    45. System.out.println(node.getNodeName()+"节点的country属性值为"+attributeV);
    46. //获得node子节点下集合
    47. NodeList nodeChilds=node.getChildNodes();
    48. //遍历node子节点下集合
    49. for(int j=0;j<nodeChilds.getLength();j++)
    50. {
    51. Node details=nodeChilds.item(j);
    52. String name=details.getNodeName();
    53. //判断如果是address元素,获取子节点
    54. if("address".equals(name))
    55. {
    56. NodeList addressNodes=details.getChildNodes();
    57. //遍历address元素子节点
    58. for(int k=0;k<addressNodes.getLength();k++)
    59. {
    60. Node addressDetail=addressNodes.item(k);
    61. System.out.println(node.getNodeName()+"节点的子节点"+name+"点的子节点"+
    62. addressDetail.getNodeName()+" 节点内容为:"+addressDetail.getTextContent());
    63. }
    64. String addressAtt=details.getAttributes().getNamedItem("state").getNodeValue();
    65. System.out.println(name+"节点的state属性值为"+addressAtt);
    66. }
    67. System.out.println(node.getNodeName()+"节点的子节点"+details.getNodeName()+
    68. "节点的内容为:"+details.getTextContent());
    69. }
    70. }
    71. }
    72. catch(ParserConfigurationException e)
    73. {
    74. e.printStackTrace();
    75. }
    76. catch (IOException e)
    77. {
    78. e.printStackTrace();
    79. }
    80. catch (SAXException e)
    81. {
    82. e.printStackTrace();
    83. }
    84. }
    85. }

    上述代码详细地描述了解析步骤。通过上述代码,不难发现 DOM 解析 XML 时,主要有以下几步:

    • 创建 DocumentBuilderFactory 对象:

    //用单例模式创建DocumentBuilderFactory对象
    DocumentBuilderFactory factory=DocumentBuilderFactory.newlnstance();

    • 通过 DocumentBuilderFactory 构建 DocumentBuilder 对象:

    DocumentBuilder documentBuilder=factory.newDocumentBuilder();

    • DocumentBuilder 解析 xml 文件变为 Document 对象:

    Document document=documentBuilder.parse(file);

    取得 Document 对象之后就可以用 Document 中的方法获取 XML 数据了。