本章目标
了解XML标签库的主要标签;
可以使用XML标签进行XML文件的读取操作。
XML标签库
在开发中XML解析的操作是非常烦琐的,幸运的是在JSTL中专门提供了用于XML解析的操作,这样用户就可以不用费力的去研究SAX或DOM等操作的使用,就可以轻松的进行XML文件的解析处理。
XML标签
XPath简介
XPath的主要功能是在XML文档之中,能够准确地找到某一个节点元素,可以通过XPath找到一个XML文档中定义的节点内容或属性等。
XPath路径标记
定义一个xml文件 —— address.xml
<?xml version="1.0" encoding="UTF-8"?>
<addresslist>
<linkman>
<name id="17">chaoyi</name>
<email>chaoyi77@163.com</email>
</linkman>
</addresslist>
图示:
<x:parse>标签
<x:parse>标签的主要做用是进行XML解析的操作,语法如下所示:
<x:parse [doc="XML文件内容"] [var="保存名称"] [scope="[page | request | session | application]"] [varDom="DOM解析后的XML对象"] [scopeDom="varDom范围"] [systemId="XML文件的URI"]/>
<x:parse [var="保存名称"] [scope="[page | request | session | application]"] [varDom="DOM解析后的XML对象"] [scopeDom="varDom范围"] [systemId="XML文件的URI"]>
要解析的XML文件
<x:parse/>
<x:parse >标签的属性
<x:out>标签
<x:out>标签的主要功能是用于输出XML文件的内容,输出时要通过XPath进行路径的指定,标签的语法如下所示:
<x:out select="XPath路径" [escapeXml="[true | false]"]/>
定义要解析的XML文件
<?xml version="1.0" encoding="UTF-8"?>
<addresslist>
<linkman>
<name id="17">chaoyi</name>
<email>chaoyi77@163.com</email>
</linkman>
</addresslist>
输出name和email元素的内容
<%@ page language="java" contentType="text/html" pageEncoding="utf-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="x"%>
<html>
<head>
<title>输出 name 和 email 元素的内容</title>
</head>
<body>
<c:import var="add" url="address.xml" charEncoding="UTF-8" />
<x:parse var="addressXml" doc="${add}" />
<h3>姓名:
<x:out select="$addressXml/addresslist/linkman/name"/>
(
编号:<x:out select="$addressXml/addresslist/linkman/name/@id"/>
)
</h3>
<h3>邮箱:<x:out select="$addressXml/addresslist/linkman/email" /></h3>
</body>
</html>
效果图:
<x:set>标签
使用<x:set>标签可以将从XML文件取出的内容保存在指定的属性范围之中,标签语法如下所示:
<x:set select="XPath路径" var="属性保存名称" [scope="[page | request | session | application]"]/>
使用<x:set>标签保存解析的结果
<%@ page language="java" contentType="text/html" pageEncoding="utf-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="x"%>
<html>
<head>
<title>使用 x:set 标签保存解析的结果</title>
</head>
<body>
<c:import var="add" url="address.xml" charEncoding="UTF-8" />
<x:parse var="addressXml" doc="${add}" />
<x:set var="nameXml" scope="page" select="$addressXml/addresslist/linkman" />
<h3>姓名:<x:out select="$nameXml/name" /></h3>
</body>
</html>
效果图:
<x:if>标签
<x:if>标签的主要功能是用于判断XPath指定的内容是否符合判断的条件,此标签的语法如下所示:
<x:if select="XPath路径" var="存放判断结果" [scope="[page | request | session | application]"]/>
<x:if select="XPath路径" var="存放判断结果" [scope="[page | request | session | application]"]>
条件满足时的输出内容
</x:if>
使用<x:if>判断输出
<%@ page language="java" contentType="text/html" pageEncoding="utf-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="x"%>
<html>
<head>
<title>使用 x:if 判断输出</title>
</head>
<body>
<c:import var="add" url="address.xml" charEncoding="UTF-8" />
<x:parse var="addressXml" doc="${add}" />
<x:if select="$addressXml/addresslist/linkman/name/@id='17'">
<h3>存在编号为17信息,姓名:<x:out select="$addressXml/addresslist/linkman/name" /> </h3>
</x:if>
</body>
</html>
效果图:
<x:choose>、<x:when>、<x:otherwise>标签
在核心标签库中曾经学习过<c:choose>、<c:when>、<c:otherwise>标签用于执行多条件判断,而在XML标签中也提供了一种类似的标签,主要的功能也是多XML中的数据进行多条件判断。
在一个<x:choose>标签中可以包含多个<x:when>以及一个<x:otherwise>标签,
<x:choose>的语法如下所示。
<x:choose> 编写<x:when>或<x:otherwise></x:choose>
<x:when>用于判断每一个条件,此标签的语法如下所示。
<x:when select="XPath路径"> 标签体</x:when>
<x:otherwise>标签
<x:otherwise> 标签体</x:otherwise>
使用<x:choose>进行判断
<%@ page language="java" contentType="text/html" pageEncoding="utf-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="x"%>
<html>
<head>
<title>使用 x:choose 进行判断</title>
</head>
<body>
<c:import var="add" url="address.xml" charEncoding="UTF-8" />
<x:parse var="addressXml" doc="${add}" />
<x:choose>
<x:when select="$addressXml/addresslist/linkman/name/@id='17'">
<h3>存在编号为17信息,姓名:<x:out select="$addressXml/addresslist/linkman/name" /> </h3>
</x:when>
<x:otherwise>
<h3>啥也不是了!</h3>
</x:otherwise>
</x:choose>
</body>
</html>
效果图:
<x:forEach>标签
<x:forEach>标签的功能与<c:forEach>类似,唯一不同的是<x:forEach>标签主要的功能是迭代xml文件,此标签语法如下所示:
<x:forEach select="XPath路径" [var="存储的变量名称"] [varStatus="存放变量信息"] [begin="开始的位置"] [end="结束的位置"] [step="步长"]>
标签体内容
</x:forEach>
<x:forEach>标签的属性
定义XML文件 —— alladdress2.xml
<?xml version="1.0" encoding="UTF-8"?>
<addresslist>
<linkman>
<name id="17">chaoyi</name>
<email>chaoyi77@163.com</email>
</linkman>
<linkman>
<name id="18">chaoyv</name>
<email>chaoyv@163.com</email>
</linkman>
<linkman>
<name id="19">yike</name>
<email>baidu@163.com</email>
</linkman>
</addresslist>
使用<x:forEach>输出全部<name>节点的内容
<%@ page language="java" contentType="text/html" pageEncoding="utf-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="x"%>
<html>
<head>
<title>使用 x:forEach 输出全部 name 节点的内容</title>
</head>
<body>
<c:import var="add" url="address2.xml" charEncoding="UTF-8" />
<x:parse var="addressXml" doc="${add}" />
<x:forEach select="$addressXml/addresslist/linkman" var="linkman">
<h3>姓名:
<x:out select="name"/>
(
编号:<x:out select="name/@id"/>
)
</h3>
</x:forEach>
</body>
</html>
效果图:
小结
使用XML标签库可以方便的进行XML解析功能;
在XML标签库之中提供了判断、循环等常见操作。