XML 提供了非常灵活的方式来表示结构化的数据,可以创建自己的标记来识别数据,不仅仅人可以看懂,而且计算机也可以读懂。并且 XML 可以在不兼容的系统之间进行数据的交换,所以 XML 必定将称为最普遍的数据操作和数据传输的工具。这也注定它能成为 Web 应用程序中极具引力的集成技术之一。
JSTL 标准标签库已经提供了一些关于 XML 操作的标签,使得 JSP 开发者可以在不深入了解 SAX(Simple API for XML)和 DOM(Document Object Model,即文件对象模式)等技术条件就可以处理XML 文件。
在 XML 操作过程如下:
(1)先实现<c:import>标签把要处理的 XML 文件检索到,
(2)使用<x:parse>标签来解析这个文件,<x:parse>标签支持标准的 XML 解析技术,例如文件对象模式(DOM)和简单的XML API(SAX)技术。
(3)标签<x:transform>标签可以使用来转换 XML 文件,它使用的是扩展样式语言(Extensible Stylesheet Language,简称 XSL)技术。

关于 XML 的标签库还提供了很多标签来处理解析后的 XML 数据,其中就使用到了一种标准――XML 路径语言(XML Path Language,XPath),用来引用和读取解析后的 XML 文件中的数据。

1 XPath介绍

XPath 标准是用来对 XML 文档各部分数据进行定位的语言。它除了提供了一套定位语法之外,还包括一些函数,可以提供基本的数字运算、布尔运算以及字符串处理等功能。
XPath 使用了一种紧凑和非 XML 的语法来方便地实现 XPath 在 XML 属性值中使用,它基于 XML文档的逻辑结构,在该结构中进行导航。除了用于定位,XPath 自身还包含了一个子集用于进行匹配,还可以用来验证一个节点是否匹配某个模式。XPath 是把一个 XML 文档看成一个树和节点的模式。节点的类型可以有多种,其中包括元素节点、属性节点和文本节点。
XPath 的基本语法由表达式构成。在计算机表达式的值后面生成一个对象,这个对象有以下四种基本类型:
节点集(Node Set)、布尔数值、数字型、字符串类型
XPath 基本上和文件系统中查找文件相类似,如果路径是以“/”开头的,则表示该路径是一个决定路径,这和在 UNIX 操作系统中关于文件路径的定义是一致的。
当然了 XPath 它本身有自己的一套完整的语法说明来进行 XML 文件的定位。
这里不列出所有严格的定义表达式,而是使用一些实例来说明如何使用 XPath 语言。

1.1 “/”和“//”的使用

“/”是表示当前文档的节点,类似 DOS 目录分割符,“//”则表示当前文档所有的节点。类似查看整个目录。
(1)/authors/author:
表示选择根目录下、父节点为 authors 的元素“author”。

(2)/authors/author/name:
表示查找到所有名称为“name”的元素,但是它的父节点为“author”,而“author”的父节点又为“authors”。

(3)//name:表示查找 XML 文件中的所有“name”元素,而无论这个元素在什么层次。

1.2 “*”的使用

”标记表示某个层次上的所有元素。
(1)/authors/author/

表示在 author 元素(它的父节点为 authors)下的所有子元素(本例为 name和 nationality 两个元素)。

(2)/authors/*/name:
表示查找所有名为 name 的元素,而不管它的父节点是谁,或者是 author,也或者是 super-author 元素,但是再上一个父节点确必须是 authors 元素。

(3)//*:表示查找到所有元素。

1.3 路径分支

方括号表示路径分支。
(1)/authors/author[nationality]/name:
表示只查找那些在 authors 元素下包含 nationality 子元素的author 元素的 name 节点。

(2)authors/author[nationality=’Russian’]/name:
表示查找那些 nationality 子元素值为 German 的 author元素下的 name 节点,而且 author 元素的父节点为 authors。

1.4 xml的案例

address.xml

<?xml version="1.0" encoding="GBK"?>
<addresslist><linkman><name id="yjy">杨剑勇</name><email>yjy@cslg.cn</email></linkman>
</addresslist>

2 XML核心动作标签

包括的核心动作标签有如下几个:
<x.parse>:用于解析 XML 文件。
<x.out>:通过 XPath 来读取 XML 文件中的某元素。
<x:set>:该标签用来计算 XPath 表达式,并且把结果保存在指定的变量当中

2.1 <x:parse>标签

该标签的使用格式如下:

<x:parse doc="XMLDocument" [var="varName"] [scope="scope"] | [varDom="varName"] [scopeDom="scope"][systemId="systemId"] [filter=”filter"] />

标签中的各属性描述如下:
doc:指定要解析的 XML 文件。一般使用<c:import>检索到相应的 XML 文件。
var:把解析之后的 XML 文件存储在 var 属性指定的变量中。
scope:设置 var 属性指定的变量有效范围。
varDom:存储解析后的 XML 文件。
scopeDom:设置 varDom 属性指定变量的有效范围。
systemId:指定 XML 文件的 URI。
filter:对应的是 org.xml.sax.XMLFilter 类。

使用<x:parse>标签的案例

<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml"%>
<html>
<head><title>JSTL: XML -- Parse解析 XML</title></head>
<c:set var="xmlText"><a><b><c>good</c> </b><d><c>baby</c></d>
</a>
</c:set><x:parse var="xmlDoc" doc="${xmlText}" />
<x:out select="$xmlDoc//c"/><br>
<x:out select="$xmlDoc/a/d"/><br>
<x:out select="$xmlDoc/a/*"/><br>
</body>
</html>

该程序中,首先使用<c:set>定义一个 xml 文件内容,并保存在 xmlText 变量中,然后通过<x:parse>标签对这个 XML 文件内容进行解析。最后使用<x:out>标签和指定的 XPath 表达式来查找 XML 文件的元素。运行结果:

good
baby
good

2.2 <x:out>标签

该标签是用于计算 XPath 表达式,然后把查找到的元素进行输出。其一般的使用格式如下:

<x:out select="XPathExpression" [escapeXml="true|false"] />

属性说明如下:
select:将要计算的 XPath 表达式。
escapeXml:确定<、>、&、’、”这些字符是否被转换成字符实体代码,默认为 true。

使用<x:out>的案例

<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml"%>
<html>
<head><title>JSTL_XML_out</title></head>
<body><c:import var="add" url="address.xml" charEncoding="GBK"/><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>

运行结果:

姓名:杨剑勇 (编号:yjy)
邮箱:yjy@cslg.cn

2.3 <x:set>标签

该标签首先计算 XPath 表达式,然后把计算的结果保存在指定的变量中,而不是输出。<x:set>标签的一般使用格式如下:

<x:set select="XPathExpression"  var="varName" [scope="page|request|session|application"] />

标签中各属性描述如下:
select:将要被计算的 XPath 表达式。
var:把 XPath 表达式计算之后的值保存在这个属性所指定的变量中,以后可以通过指定的变量 来引用这个值。
scope:设置 var 属性所指定变量的有效范围。

使用<x:set>的案例

<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml"%>
<html>
<head><title>JSTL_XML_Set</title></head>
<body><c:import var="add" url="address.xml" charEncoding="GBK"/><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>

运行结果:

姓名:杨剑勇

3 XML的流程控制动作

用于 XML 流程控制的标签包括:<x:if><x:choose><x:when><x:otherwise> <x:forEach>
这些标签和核心标签库中的<c:if>、<x:choose>、<x:otherwise>以及<x:forEach>非常相似,不同的只是 XML 流程控制标签使用的是 XPath 表达式。

3.1 <x:if>标签

通过计算 select 属性指定的 XPath 表达式是否为正,即如果 XPath 表达式指定的元素存在则为正,否则为假,然后根据判断结果决定是否输出<x:if>体中的代码程序或者表达式。<x:if>标签使用格式如下:

<x:if select="XPathExpression" var="varName" [scope="page|request|session|application"] />

如果这个标签有一个体,使用格式如下:

<x:if select="XPathExpression" [var="varName"] cope="page|request|session|application"] >Body content
</x:if>

属性描述如下:
select:指定的 XPath 表达式,如果这个表达式指定的元素存在返回 true,否则返回 false。
var:保存判断的结果,true 或者 false。
scope:设置 var 属性指定变量的范围。

使用<x:if>的案例

<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml"%>
<html>
<head><title>JSTL_XML_if</title></head>
<body><c:import var="add" url="address.xml" charEncoding="GBK"/><x:parse var="addressXml" doc="${add}"/><x:if select="$addressXml//name/@id='yjy'"><h3>存在编号是yjy的信息,姓名:<x:out select="$addressXml/addresslist/linkman/name"/></h3></x:if>
</body>
</html>

运行结果是:

存在编号是yjy的信息,姓名:杨剑勇

3.2 <x:choose><x:when>和<x:otherwise>标签

这三个标签一般配套使用,与核心标签库中的流程控制标签一样,<x:when>和<x:otherwise>作为子标签嵌套在<x:choose>标签体中。这三个标签的一般组合使用格式如下:

<x:choose><x:when select="XPathExpression">Body content1</x:when>..............<x:otherwise>Conditional block</x:otherwise>
</x:choose>

使用<x:choose><x:when><x:otherwise>的案例

<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml"%>
<html>
<head><title>JSTL_XML_Choose</title></head>
<body><c:import var="add" url="address.xml" charEncoding="GBK"/><x:parse var="addressXml" doc="${add}"/><x:choose><x:when select="$addressXml//name/@id='yjyyjy'"><h3>编号是yjy的名称是:<x:out select="$addressXml/addresslist/linkman/name"/></h3></x:when><x:otherwise><h3>啥也不是了!</h3></x:otherwise></x:choose>
</body>
</html>

运行结果是:

啥也不是了!

3.3 迭代标签<x:forEach>

<x:forEach>标签首先通过计算 select 属性所指定的 XPath 表达式,然后把得到的元素集合作迭代处 理。
基本使用格式如下:

<x:forEach [var="varName"] select="XPathExpression">body content
</x:forEach>

使用<x:forEach>的案例

新建一个xml文件,用来可以循环信息

<?xml version="1.0" encoding="GBK"?>
<addresslist><linkman><name id="yjy">杨剑勇</name><email>yjy@cslg.cn</email></linkman><linkman><name id="kf">客服中心</name><email>cslg@163.com</email></linkman><linkman><name id="hr">招聘中心</name><email>cslgrsc@163.com</email></linkman>
</addresslist>

使用<x:forEach>读取内容

<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml"%>
<html>
<head><title>JSTL</title></head>
<body><c:import var="add" url="alladdress.xml" charEncoding="GBK"/><x:parse var="addressXml" doc="${add}"/><x:forEach select="$addressXml//linkman" var="linkman"><h3>姓名:<x:out select="name"/>(编号:<x:out select="name/@id"/>)</x:forEach>
</body>
</html>

运行结果:

姓名:杨剑勇(编号:yjy)
姓名:客服中心(编号:kf)
姓名:招聘中心(编号:hr)

4 XML的转换动作

XML 标签库提供的 XML 转换动作标签使得 XML 文件以 XSLT 可扩展样式表(它是一种用于 XML文件转换的语言,作为 Web 应用的一种表示层技术已经非常流行)转换成为了可能。转换动作主要使用到了两个标签:
<x:transform>:用于把 XML 文件转换成 XSLT 格式。
<x:param>:和<x:transform>配套使用,用于传递参数。

4.1 <x:transform>标签

与<x:parse>标签情况一样,<x:transform>标签支持多种不同的格式。<x:transform>最基本的格式的语法是:

<x:transform xml="expression" xslt="expression"   var="name" scope="scope" xmlSystemId="expression" xsltSystemId="expression">
<x:param name="expression" value="expression"/>
...
</x:transform>

格式说明:
此处, 属性规定要被转换的文件, 属性规定定义这次转换的样式表xmlxslt(文件后缀为“.xsl” 。)这两种属性是必要的,其他属性为可选。
与<x:parse>的 xml 属性一样,<x:transform>的 xml 属性值可以是包含 XML 文件的字符串,或者 是 接 入 这 类 文 件 的 Reader 。 此 外 , 它 还 可 以 采 用 org.w3c.dom.Document 类 或javax.xml.transform.Source 类的实例格式。最后,它还可以是使用<x:parse>操作的 var 或 varDom属性分配的变量值。
另外,还可以根据<x:transform>操作的主体内容来包含要被转换的 XML 文件。在这种情况下,<x:transform>的语法是:

<x:transform xslt="expression" var="name" scope="scope" xmlSystemId="expression" xsltSystemId="expression">body content(XML document)
<x:param name="expression" value="expression"/>
...
</x:transform>

格式说明:
在这两种情况下,规定 XSL 样式表的 xslt 属性应是字符串、Reader 或 javax.xml.transform.Source实例。
如 果 var 属性 存 在 , 转 换 后 的 XML 文 件 将 分 配 给 相 应 的 var 属 性指 定 的 变 量 , 作 为org.w3c.dom.Document 类的一个实例。通常,scope 属性规定这类变量分配的范围。
<x:transform>标记还支持将转换结果存储到 javax.xml.transform.Result 类的一个实例中,而不是作为org.w3c.dom.Document 的一个实例。如果 var 和 scope 属性被省略,result 对象规定作为 result 属性的值,<x:transform>标记将使用该对象来保存应用该样式表的结果。下面介绍了使用<x:transform>的 result 属性的这两种语法的变化:

<x:transform xml="expression" xslt="expression" result="expression" xmlSystemId="expression" xsltSystemId="expression"><x:param name="expression" value="expression"/>
...
</x:transform>
<x:transform xslt="expression"   result="expression"  xmlSystemId="expression" xsltSystemId="expression">body content(XML document)
<x:param name="expression" value="expression"/>
...
</x:transform>

格式说明:无论您采用这两种<x:transform>格式中的那一种,您都必须从定制标记单独创建javax.xml.transform.Result 对象。该对象自身作为 result 属性的值提供。
如果既不存在 var 属性,也不存在 result 属性,转换的结果将简单地插入到 JSP 页面,作为处理<x:transform>操作的结果。当样式表用于将数据从 XML 转换成 HTML 时尤其有用,如下所示:

<c:import var="rssFeed" url="http://slashdot.org/slashdot.rdf"/>
<c:import var="rssToHtml" url="/WEB-INF/xslt/rss2html.xsl"/>
<x:transform xml="${rssFeed}" xslt="${rssToHtml}"/>

在本例中,使用<c:import>标记来读取 RSS 反馈和适当的样式表。样式表的输出结果是 HTML,通过忽略<x:transform>的 var 和 result 属性来直接显示。
与<x:parse>的 systemId 属性一样,<x:transform>的 xmlSystemId 和 xsltSystemId 属性用于解析 XML文件中相关的路径。在这种情况下,xmlSystemId 属性应用于根据标记的 xml 属性值提供的文件,而xsltSystemId 属性用于解析根。

4.2<x:param>标签

该标签是用来给<x:transform>标签传递参数,并且是嵌套在<x:transform>标签体中。它基本的格式语法有如下两种:
(1)传递的参数变量值在“value”属性中设置:

<x:param name="”varname" value="value"/>

(2)传递的参数值在标签体中指定:

<x:param name="varname">Parameter value
</x:param>

5 XML文件元素查找案例

<?xml version="1.0" encoding="UTF-8"?>
<games><country id="Luxembourg"><athlete><name>Lux1</name><sport>swimming</sport><age>23</age><gender>M</gender></athlete><athlete><name>Lux2</name><sport>wrestling</sport><age>31</age><gender>M</gender></athlete></country><country id="Denmark"><athlete><name>Den 1</name><sport>cycling</sport><age>18</age><gender>F</gender></athlete><athlete><name>Den 2</name><sport>sailing</sport><age>27</age><gender>M</gender></athlete></country>
</games>
<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>
<html>
<head><title>JSTL: XML -- Parse / Out</title></head>
<body>
<h3>parse 和 out 标签的实例</h3>
<!--引入 games.xml 文件-->
<c:import var="docString" url="games.xml"/>
<x:parse var="doc" doc="${docString}"/><table ><tr ><td  valign="top"><table border="1px"><tr><td valign="top"><pre><c:out value="${docString}"/></pre></td><td valign="top"></td> </tr></table></td><td valign="top"><table border="1px"><tr><th>XPath 表达式</th> <th>查找到的元素</th></tr><tr><td>$doc/   /sport</td><td><x:out select="$doc//sport"/><br></td></tr><tr><td>$doc/games/country/ *</td> <td><x:out select="$doc/games/country/*"/><br></td></tr><tr><td>$doc/games/country</td><td><pre><x:out select="$doc/games/country"/></pre></td></tr><tr><td>$doc/games/country[last()]</td><td><pre><x:out select="$doc/games/country[last()]"/></pre></td></tr><tr> <td>$doc/ /@id </td><td><pre><x:out select="$doc//@id"/></pre></td></tr><tr><td>$doc/ /country[@id='Denmark']</td> <td><pre><x:out select="$doc//country[@id='Denmark']"/></pre></td></tr><tr><td>$doc/ / *</td> <td><pre><x:out select="$doc//*"/></pre></td></tr></table>    </td>
</tr></table>
</body>
</html>

运行结果是:

JSP~~JSTL~~XML标签库相关推荐

  1. JSP→JSTL标准标签库简介与环境搭建、JSTL助手EL表达式EL隐式对象、标签→out、set、if、多选择配合、foreach、redirect、格式化、JSTL函数标签、自定义标签、标签类架构

    JSTL标准标签库简介与环境搭建 EL表达式与EL隐式对象 out标签 set标签 remove标签 catch标签 if标签 choose.when.otherwise配合标签 foreach标签 ...

  2. 使用JSP的标准标签库JSTL处理XML格式的数据

    JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能. 下载地址:https://archive.apache.org/dist/jakarta/taglibs/stan ...

  3. EL表达式和JSTL标准标签库

    一.EL表达式 什么是EL表达式 EL(Express Lanuage)表达式可以嵌入在jsp页面内部 减少jsp脚本的编写 EL出现的目的是要替代jsp页面中脚本的编写. EL表达式的作用 EL最主 ...

  4. 早起的鸟儿有虫吃-JSTL核心标签库[收藏]

    介绍 JSTL 全名为Java Server Pages Standard Tag Library(JSP Standard Tag Library),它的中文名称为JSP 标准标签函数库. Web  ...

  5. ⑤早起的鸟儿有虫吃-JSTL核心标签库[收藏]

    介绍 JSTL 全名为Java Server Pages Standard Tag Library(JSP Standard Tag Library),它的中文名称为JSP 标准标签函数库. Web  ...

  6. 06.JSTL(基本标签库)

    06.JSTL(基本标签库) 1.JSTL 概述: (JavaServer Page Strandard Tag Linrary):JSP标准标签库 是由Java社区所定制的,提供给JavaWeb开发 ...

  7. 深入分析JavaWeb Item21 -- JSTL核心标签库

    一.JSTL标签库介绍 JSTL标签库的使用是为弥补html标签的不足,规范自定义标签的使用而诞生的.使用JSLT标签的目的就是不希望在jsp页面中出现java逻辑代码. 1.1 使用方法 外包项目, ...

  8. JSTL 核心标签库标签共有13个

    JSTL 核心标签库标签共有13个,功能上分为4类: 1.表达式控制标签:out.set.remove.catch 2.流程控制标签:if.choose.when.otherwise 3.循环标签:f ...

  9. java的jstl的标签库_java_jstl 标签库

    jstl标签库的使用以及介绍 jstl:jsp标准标签库,是jsp的标签集合,它里面封装了jsp通用的核心功能,比如:建构化的任务,迭代,条件判断,xml 文档的操作,国际化标签,sql标签,还提供框 ...

最新文章

  1. ORACLE DUAL
  2. 使用高斯混合模型对不同的股票市场状况进行聚类
  3. F#中的异步和并行设计模式(三):代理
  4. 剖析ifstream打开含中文路径名文件失败的原因(转)
  5. ds18b20温度转换指令_DS18B20温度传感器(附代码并浅谈与或运算)
  6. 关于struts,spring,hibernate的几个问题
  7. Scikit-learn数据预处理分类变量编码之等级变量编码
  8. Java黑皮书课后题第6章:**6.26(回文素数)回文素数是指一个数同时为素数和回文数。编程程序,显示前100个回文素数,每行显示10个数,数字中间用一个空格隔开
  9. android dip转px
  10. 数据接口的登录态校验以及JWT
  11. iOS-推送通知详解
  12. 第四季-专题14-串口驱动程序设计
  13. 算法---LeetCode 113. 路径总和 II
  14. python str.split以及str.split字符串分割函数
  15. php 时间格式大全
  16. java stream转byte[ ]
  17. 算法提高课-图论-欧拉回路和欧拉路径-AcWing 1123. 铲雪车:披着欧拉回路外衣的小学数学题
  18. ASM磁盘介绍及PIGOSS BSM支持ASM磁盘监控
  19. JS实现网站的简体字与繁体字转换
  20. 【云计算小知识】什么是云计算?云计算特点是什么?

热门文章

  1. 清华毕业生都去哪儿了
  2. 计算机领域经典故事,[转载]计算机的工作原理(1):一个经典的故事
  3. PLC实训 — 传感器介绍
  4. 使用方法论报告第 2 部分:方法违例对于 QoR 的影响
  5. 唠唠SE的集合-01——Collection接口
  6. 静态路由配置(不会配静态路由,看这里就够了!)
  7. 软件无线电技术简介及特点应用
  8. Python环境配置与数据处理
  9. linux 格斗游戏,新闻|“战斗砖块剧场”占据了 Steam 上 Linux游戏排行榜首位
  10. redis可持续化存储的时候出现Can t save in background fork Cannot allocate memory