第 12章 JSP与 XML
JSP 动态网页新技术 1
关于 XML
XML是一种类似 HTML标签语法的纯文字格式文件,使用一般的文字编辑器 (例如 Notepad)就可以对其内容进行编辑,下面是一个记录会员数据的 XML文件范例,
<?xml version='1.0' encoding=?GB2312'?>
<customers>
<customer access='deny'>
<customerid >1001</customerid >
<customername >管正 </customername >
<tel>02-35330000</tel>
<email>jack@testMail.com.tw</email>
</customer>
<customer access='pass'>
<customerid >1002</customerid >
<customername >方峻 </customername >
<tel>02-35331111</tel>
<email>tim@testMail.com.tw</email>
</customer>
</customers>
第 12章 JSP与 XML
JSP 动态网页新技术 2
XML相关技术
除了本身的语法之外,还必须了解其相关技术,例如 DTD,DOM
和 XSL,这些广泛的技术均是为了 XML的使用而发展出来 。
文件对象模型 -Document Object Model (DOM)
– DOM是一种使用于文件的操作与结构定义的技术,它以 API的形式供 XML文件使用,就如同文本编辑器对于一般文本文件。
用户可以利用 DOM进行 XML文件的编写、浏览以及增删改等操作 。
可扩充样式语言 -Extensible Stylesheet Language(XSL)
– 这是一种用来定义以及转换 XML文件内容格式的 XML相关技术,包含了 XSL Transformations (XSLT),XML Path Language
(XPath)以及 XSL Formatting Objects (XSL-FO)等三个部份 。
第 12章 JSP与 XML
JSP 动态网页新技术 3
JAXP 与 DOM
通过 JAXP使用 DOM必须载入两个主要的包,org.w3c.dom和
javax.xml.parsers 。
org.w3c.dom提供定义 DOM的相关接口,例如 Document,Element
以及 Node等等与代表各种组成 XML树状结构元素的接口 。
javax.xml.parsers则是包含了 org.w3c.dom包接口的相关类,提供存取 XML文件所需的实际功能,例如 DocumentBuilderFactory以及
DocumentBuilder等等 。
第 12章 JSP与 XML
JSP 动态网页新技术 4
DOM与 XML
包 接口与类 说 明
javax.xml.parsers DocumentBuilderFactory 用来建立 DOM解释器实体对象
DocumentBuilder DOM解释器,用来建立代表 XML文件的 Document
org.w3c.dom Document 代表 XML文件
Node 代表整个 XML文件树状结构里面最原始的数据类型接口,定义处理节点的相关方法,并由此接口的类所操作
Element 代表 XML文件当中的任何一个元素,
同时定义操作元素的方法成员,继承
Node接口
NodeList 代表一个包含一个以上节点的集合接口第 12章 JSP与 XML
JSP 动态网页新技术 5
DOM树状结构
<? x m l v e r s i o n = " 1,0 " e n c o d i n g = " G B 2 3 1 2 "? >
< c u s t o m e r s >
< c u s t o m e r >
< c u s t o m e r i d > 1 0 0 1 < / c u s t o m e r i d >
< c u s t o m e r n a m e > 管 正 < / c u s t o m e r n a m e >
< t e l > 0 2 5 - 8 4 2 1 0 0 2 0 < / t e l >
< e m a i l > g z @ f j,c o m < / e m a i l >
< / c u s t o m e r >
< c u s t o m e r >
< c u s t o m e r i d > 1 0 0 2 < / c u s t o m e r i d >
< c u s t o m e r n a m e > 方 峻 < / c u s t o m e r n a m e >
< t e l > 0 2 5 - 8 4 2 1 0 0 2 0 < / t e l >
< e m a i l > t e a @ f j,c o m < / e m a i l >
< / c u s t o m e r >
< / c u s t o m e r s >
{
{
文 字 节 点文 字 节 点节 点节 点节 点
< c u s t o m e r s >
子 节 点
< c u s t o m e r >
子 节 点第 12章 JSP与 XML
JSP 动态网页新技术 6
Node & Element
Node接口,代表 XML文件当中最基本的单位元素,一个 Node下可能还包含子节点,而某些如文字内容的节点则为单一 Node,例如 <tel></tel>以及 <email></email>等等 。
Element是处理 XML文件最常使用的接口,它定义了操作 XML节点所需的方法成员 。
第 12章 JSP与 XML
JSP 动态网页新技术 7
获取节点
getElementsByTagName() 主要 功能在于取得某个特定节点下的所有子节点,它返回一个 NodeList对象,其中包含了此节点下所有的子结点集合 。
getElementsByTagName(nodeName)
Node接口本身定义了取得特定节点的方法,其中比较重要者包含了用来取得文字形态节点内容文字的 getNodeValue(),引用这个方法可以取得指定节点的文字内容 。
getFirstChild(),此方法则是将代表第一个节点的 Node当作结果返回第 12章 JSP与 XML
JSP 动态网页新技术 8
使用 DOM建立 XML文件
createElementNS()以及 createTextNode(),建立形成 XML文件结构的所有节点 。
createElementNS()用來 建立 XML文件当中任何一个形态为 Element的节点元素 。
CreateElementNS(namespaceURI,qualifieName)
– 第 1个字符串代表此元素命名空间 URI,没有特别指定则必须传入一个 null值
– 第 2个则是所要建立的元素名称 。
createTextNode()则是用来建立形态为 Node的文字节点,其中的
qualifieName则是此节点的名称 。
createTextNode(qualifieName)
第 12章 JSP与 XML
JSP 动态网页新技术 9
使用 DOM建立 XML文件
appendChild()的 方法可以将指定的元素加入当前的元素当中,
成为当前元素的子节点,其中的参数 nodeChild为所要加入的子节点 。
appendChild(nodeChild)
– 建立的 XML文件,只是暂时存在内存当中,紧接着还要进一步将其转换作输出 。
第 12章 JSP与 XML
JSP 动态网页新技术 10
建立 XML文件所需的包与类接口包 类 说 明
javax.xml.transform TransformerFa
ctory
建立 XML转换实体对象
Transformer 提供 XML转换功能
javax.xml.transform.
dom
DOMSource 代表一个 XML转换所需的数据来源
javax.xml.transform.
stream
StreamResult 代表一个 XML转换所需的数据输出目标第 12章 JSP与 XML
JSP 动态网页新技术 11
建立 XML文件
XML文件的转换主要通过 Transformer来进行 。
transform(xmlSource,outputTarget)
– xmlSource代表所要转换的 XML
– outputTarget以 StreamResult对象为 其操作 方法
Transformer使用之前,必须引用 TransformerFactory的
newTransformer(),返回所需的 Transformer对象,完成 转换操作 。
TransformerFactory tff= TransformerFactory.newInstance();
Transformer theTransformer=tff.newTransformer();
第 12章 JSP与 XML
JSP 动态网页新技术 12
XSLT与 XML文件格式化
XSLT是一种被用来格式化 XML输出内容的相关技术,它通过一种称为 XSL的样式表,将 XML转换成为指定的样式作输出,XSLT是格式化 XML的标准技术 。
第 12章 JSP与 XML
JSP 动态网页新技术 13
样式表结构样式表的内容结构由前缀为 xsl的标签所组成,由 <xsl:stylesheet>
</xsl:stylesheet>这一组标签声明其内容范围区域 。
<?xml version="1.0" encoding=“GB2312"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0" >
样式表 內容 …
</xsl:stylesheet>
第 12章 JSP与 XML
JSP 动态网页新技术 14
样板标签 <xsl:template>则被用来定义每一个作为样式的样版区块
<xsl:template >
样板 內容 …
</xsl:template>
第 12章 JSP与 XML
JSP 动态网页新技术 15
样板
<xsl:template >依据设定的内容决定其用途,本章主要有两种使用方式,一种是直接设定此标签样版内容所要套用的 XML节点 。
<xsl:template match="customers">
样板 內容 …
</xsl:template>
– 其中 match的设定值 customers,代表这个 template标签所要套用的节点,也就是将此标签的内容套用至所有 customers元素的内容,以此样版标的内容为样式作输出 。
让一个样板标签被重复使用,可指定一个名称给它 。
<xsl:template name=funName>
样板 內容 …
</xsl:template>
funName在样式表中被用来识别这个样版标签,以 funName为名称调用此样版即可 。
第 12章 JSP与 XML
JSP 动态网页新技术 16
样板
样版标签另外可以提供参数,供外部传递特定数据 。
<xsl:param name=paraName/>
– <xsl:param>代表这是一个参数,而 name的设定值 paraName则被用来识别此参数 。
如果想要引用已设定 name的样板,则需要使用标签 <xsl:call-
template>。
<xsl:call-template name= templateName >
如果所引用的样板当中包含了参数标签,则必须利用标签
<xsl:with-param>将参数值传递进去 。
<xsl:with-param name=paramName >
第 12章 JSP与 XML
JSP 动态网页新技术 17
数据 存取
想要取得 XML文件结构里特定节点的元素内容,需通过标签
<xsl:value-of> 。
<xsl:value-of select=nodeName />
<xsl:for-each>标签可以对指定的节点下所有的元素进行浏览操作 。
<xsl:for-each select="$customerelement" >
– <xsl:for-each>标签中的 select代表所要浏览的节点名称第 12章 JSP与 XML
JSP 动态网页新技术 18
套用样式表
XML文件的转换主要是通过 Transformer对象来完成,如果想要套用 XSL样式表,则要在建立 Transformer对象的时候,直接指定所要使用的样式表 。
TransformerFactory tff= TransformerFactory.newInstance();
Transformer theTransformer=
tff.newTransformer(XSLFielSource);
第 12章 JSP与 XML
JSP 动态网页新技术 19
JSTL的 XML标签分 类 标 签 说 明核心 标签 <x:parse> 解释 XML文件内容
<x:out> 输出指定 XPath的 XML节点内容
<x:set> 储存指定 XPath的 XML节点内容流程控制 <x:if> 依 XPath判断式,控制程序流程
<x:foreach> 对部份指定的 XML文件内容运行列举循环
<x:choose> 提供容纳 <x:when>与 <x:otherwise>的运行区块
<x:when> <x:choose>区域当中条件为真的判断式
<x:otherwise> 当所有 <x:when>的判断式不成立则运行此区块样式转换 <x:transform> 以指定的 XSLT样板,转换 XML格式
<x:param> 和 <x:transform>标签配合使用。。
第 12章 JSP与 XML
JSP 动态网页新技术 20
<x:parse>
语法 1,通过字符串 (String)或是 Reader对象指定所要解析的 XML文件 。
<x:parse {doc="XMLDocument"|xml1="XMLDocument"}
{var="var" [scope="scope"]|varDom="var" [scopeDom="scope"]}
[systemId="systemId"]
[filter="filter"]/>
语法 2,通过本体内容指定所要解析的 XML文件 。
<x:parse
{var="var" [scope="scope"]|varDom="var" [scopeDom="scope"]}
[systemId="systemId"]
[filter="filter"]>
XML內容文件 …
</x:parse>
第 12章 JSP与 XML
JSP 动态网页新技术 21
<x:parse>-属性属 性 动态 类 型 说 明
doc 是 String,Reader 解释的 XML文件来源
xml 是 String,Reader 同 doc
systemId 是 String 解释 XML文件的系统 ID
filter 是 XMLFilter XML文件滤器
var 否 String 解释后的 XML
scope 否 String var范围
varDom 否 String 储存解释后的 XML,类型为
org.w3c.dom.Document
scopeDom 否 String varDom的范围第 12章 JSP与 XML
JSP 动态网页新技术 22
<x:set>
<x:set select=”XPathExpression” var=”varName”
[scope=”{page|request|session|application}”]/>
– val的变量用来储存 select指定的 XPath对应内容,而其中的
scope则是变量的内容 。
– 一旦通过 <x:set>储存指定的 XPath对应内容,var将只能提供给其它的 XML标签所使用 。
第 12章 JSP与 XML
JSP 动态网页新技术 23
流程控制 -<x:if>
语法 1,无本体内容
<x:if select=”XPathExpression”
var=”varName” [scope=”{page|request|session|application}”]/>
语法 1,包含本体内容
<x:if select=”XPathExpression”
[var=”varName”] [scope=”{page|request|session|application}”]>
本体 內容 …
</x:if>
第 12章 JSP与 XML
JSP 动态网页新技术 24
<x:choose>,<x:when>与 <x:otherwise>
这 3个标签以 <x:choose>为主体,组合成为一个选择性的判断式,其中的 <x:when>
进行相当于 <x:if>标签的判断行为,不过它还可以提供不同的输出结果,当判断条件不符的时候,另外通过 <x:otherwise>输出指定的内容 。
语法,<x:choose>
<x:choose>
本体 內容 (<x:when>和 <x:otherwise>标签 )
</x:choose>
语法,<x:when>
<x:when select=”XPathExpression”>
本体 內容 …
</x:when>
语法,<x:otherwise>
<x:otherwise>
条件式区域 …
</x:otherwise>
第 12章 JSP与 XML
JSP 动态网页新技术 25
<x:choose>,<x:when>与 <x:otherwise>
除了 <x:when>,其它的两个标签均无任何属性需要设 。
<x:choose>标签主要用来界定 <x:when>和 <x:otherwise>位置 。
<x:choose>与 </x:choose>之间,只能包含一个或是一个以上的 <x:when>
标签,而 <x:otherwise>标签可以省略,但是最多只能有一个 。
所有的 <x:when>标签必须在 <x:otherwise>标签出现之前 。
<x:when>标签的 select属性用来设定判断式,当它的运算结果为 true的时候,其中的本体内容被运行,当所有的 <x:when>均为 false的时候,运行
<x:otherwise>当中的本体内容 。
第 12章 JSP与 XML
JSP 动态网页新技术 26
<c:foreach>
当解释的 XML文件包含了一个以上的子节点,则可以用 <c:foreach>标签将其中所有的节点全部读取出来,以列出此标签的相关语法 。
语法
<x:forEach[var=”varName”] select=”XPathExpression”>
[varStatus=”varStatusName”]
[begin=”begin”] [end=”end”] [step=”step”]>
本体 內容 …
</x:forEach>
此 标签会将 select 属性 XPath字符串表示式 XpathExpression,其对应的
XML文件内容区块中所有的子节点一一取出,除此之外,通过 begin、
end和 step3个属性的设定,我们还可以指定取得某特定索引位置的节点内容 。
第 12章 JSP与 XML
JSP 动态网页新技术 27
<c:foreach>-属性属 性 动态类 型 说 明
var 否 String 指定用来储存节点的变量
select 否 String XPath表示式,代表所要浏览的 XML区块
varStatus 否 String 储存列举操作的运行状态
begin 是 int 开始列举的节点位置索引
end 是 int 结束列举的节点位置索引
step 是 int 列举节点的间隔数第 12章 JSP与 XML
JSP 动态网页新技术 28
样式转换
语法 1,无本体内容
<x:transform
{doc=”XMLDocument”|xml1=”XMLDocument”} xslt=”XSLTStylesheet”
[{docSystemId=”XMLSystemId”|xmlSystemId1=”XMLSystemId”}]
[xsltSystemId=”XSLTSystemId”]
[{var=”varName” [scope=”scopeName”]|result=”resultObject”}]
语法 2,指定转换参数的本体内容
<x:transform
{doc=”XMLDocument”|xml1=”XMLDocument”} xslt=”XSLTStylesheet”
[{docSystemId=”XMLSystemId”|xmlSystemId1=”XMLSystemId”}]
[xsltSystemId=”XSLTSystemId”]
[{var=”varName” [scope=”scopeName”]|result=”resultObject”}]
<x:param> actions
</x:transform>
第 12章 JSP与 XML
JSP 动态网页新技术 29
样式转换
语法 3,包含 XML文件与选择性的转换参数
<x:transform
xslt=”XSLTStylesheet”
[{docSystemId=”XMLSystemId”|xmlSystemId1=”XMLSystemId”}]
xsltSystemId=”XSLTSystemId”
[{var=”varName” [scope=”scopeName”]|result=”resultObject”}]
XML Document to parse
optional <x:param> actions
</x:parse>
JSP 动态网页新技术 1
关于 XML
XML是一种类似 HTML标签语法的纯文字格式文件,使用一般的文字编辑器 (例如 Notepad)就可以对其内容进行编辑,下面是一个记录会员数据的 XML文件范例,
<?xml version='1.0' encoding=?GB2312'?>
<customers>
<customer access='deny'>
<customerid >1001</customerid >
<customername >管正 </customername >
<tel>02-35330000</tel>
<email>jack@testMail.com.tw</email>
</customer>
<customer access='pass'>
<customerid >1002</customerid >
<customername >方峻 </customername >
<tel>02-35331111</tel>
<email>tim@testMail.com.tw</email>
</customer>
</customers>
第 12章 JSP与 XML
JSP 动态网页新技术 2
XML相关技术
除了本身的语法之外,还必须了解其相关技术,例如 DTD,DOM
和 XSL,这些广泛的技术均是为了 XML的使用而发展出来 。
文件对象模型 -Document Object Model (DOM)
– DOM是一种使用于文件的操作与结构定义的技术,它以 API的形式供 XML文件使用,就如同文本编辑器对于一般文本文件。
用户可以利用 DOM进行 XML文件的编写、浏览以及增删改等操作 。
可扩充样式语言 -Extensible Stylesheet Language(XSL)
– 这是一种用来定义以及转换 XML文件内容格式的 XML相关技术,包含了 XSL Transformations (XSLT),XML Path Language
(XPath)以及 XSL Formatting Objects (XSL-FO)等三个部份 。
第 12章 JSP与 XML
JSP 动态网页新技术 3
JAXP 与 DOM
通过 JAXP使用 DOM必须载入两个主要的包,org.w3c.dom和
javax.xml.parsers 。
org.w3c.dom提供定义 DOM的相关接口,例如 Document,Element
以及 Node等等与代表各种组成 XML树状结构元素的接口 。
javax.xml.parsers则是包含了 org.w3c.dom包接口的相关类,提供存取 XML文件所需的实际功能,例如 DocumentBuilderFactory以及
DocumentBuilder等等 。
第 12章 JSP与 XML
JSP 动态网页新技术 4
DOM与 XML
包 接口与类 说 明
javax.xml.parsers DocumentBuilderFactory 用来建立 DOM解释器实体对象
DocumentBuilder DOM解释器,用来建立代表 XML文件的 Document
org.w3c.dom Document 代表 XML文件
Node 代表整个 XML文件树状结构里面最原始的数据类型接口,定义处理节点的相关方法,并由此接口的类所操作
Element 代表 XML文件当中的任何一个元素,
同时定义操作元素的方法成员,继承
Node接口
NodeList 代表一个包含一个以上节点的集合接口第 12章 JSP与 XML
JSP 动态网页新技术 5
DOM树状结构
<? x m l v e r s i o n = " 1,0 " e n c o d i n g = " G B 2 3 1 2 "? >
< c u s t o m e r s >
< c u s t o m e r >
< c u s t o m e r i d > 1 0 0 1 < / c u s t o m e r i d >
< c u s t o m e r n a m e > 管 正 < / c u s t o m e r n a m e >
< t e l > 0 2 5 - 8 4 2 1 0 0 2 0 < / t e l >
< e m a i l > g z @ f j,c o m < / e m a i l >
< / c u s t o m e r >
< c u s t o m e r >
< c u s t o m e r i d > 1 0 0 2 < / c u s t o m e r i d >
< c u s t o m e r n a m e > 方 峻 < / c u s t o m e r n a m e >
< t e l > 0 2 5 - 8 4 2 1 0 0 2 0 < / t e l >
< e m a i l > t e a @ f j,c o m < / e m a i l >
< / c u s t o m e r >
< / c u s t o m e r s >
{
{
文 字 节 点文 字 节 点节 点节 点节 点
< c u s t o m e r s >
子 节 点
< c u s t o m e r >
子 节 点第 12章 JSP与 XML
JSP 动态网页新技术 6
Node & Element
Node接口,代表 XML文件当中最基本的单位元素,一个 Node下可能还包含子节点,而某些如文字内容的节点则为单一 Node,例如 <tel></tel>以及 <email></email>等等 。
Element是处理 XML文件最常使用的接口,它定义了操作 XML节点所需的方法成员 。
第 12章 JSP与 XML
JSP 动态网页新技术 7
获取节点
getElementsByTagName() 主要 功能在于取得某个特定节点下的所有子节点,它返回一个 NodeList对象,其中包含了此节点下所有的子结点集合 。
getElementsByTagName(nodeName)
Node接口本身定义了取得特定节点的方法,其中比较重要者包含了用来取得文字形态节点内容文字的 getNodeValue(),引用这个方法可以取得指定节点的文字内容 。
getFirstChild(),此方法则是将代表第一个节点的 Node当作结果返回第 12章 JSP与 XML
JSP 动态网页新技术 8
使用 DOM建立 XML文件
createElementNS()以及 createTextNode(),建立形成 XML文件结构的所有节点 。
createElementNS()用來 建立 XML文件当中任何一个形态为 Element的节点元素 。
CreateElementNS(namespaceURI,qualifieName)
– 第 1个字符串代表此元素命名空间 URI,没有特别指定则必须传入一个 null值
– 第 2个则是所要建立的元素名称 。
createTextNode()则是用来建立形态为 Node的文字节点,其中的
qualifieName则是此节点的名称 。
createTextNode(qualifieName)
第 12章 JSP与 XML
JSP 动态网页新技术 9
使用 DOM建立 XML文件
appendChild()的 方法可以将指定的元素加入当前的元素当中,
成为当前元素的子节点,其中的参数 nodeChild为所要加入的子节点 。
appendChild(nodeChild)
– 建立的 XML文件,只是暂时存在内存当中,紧接着还要进一步将其转换作输出 。
第 12章 JSP与 XML
JSP 动态网页新技术 10
建立 XML文件所需的包与类接口包 类 说 明
javax.xml.transform TransformerFa
ctory
建立 XML转换实体对象
Transformer 提供 XML转换功能
javax.xml.transform.
dom
DOMSource 代表一个 XML转换所需的数据来源
javax.xml.transform.
stream
StreamResult 代表一个 XML转换所需的数据输出目标第 12章 JSP与 XML
JSP 动态网页新技术 11
建立 XML文件
XML文件的转换主要通过 Transformer来进行 。
transform(xmlSource,outputTarget)
– xmlSource代表所要转换的 XML
– outputTarget以 StreamResult对象为 其操作 方法
Transformer使用之前,必须引用 TransformerFactory的
newTransformer(),返回所需的 Transformer对象,完成 转换操作 。
TransformerFactory tff= TransformerFactory.newInstance();
Transformer theTransformer=tff.newTransformer();
第 12章 JSP与 XML
JSP 动态网页新技术 12
XSLT与 XML文件格式化
XSLT是一种被用来格式化 XML输出内容的相关技术,它通过一种称为 XSL的样式表,将 XML转换成为指定的样式作输出,XSLT是格式化 XML的标准技术 。
第 12章 JSP与 XML
JSP 动态网页新技术 13
样式表结构样式表的内容结构由前缀为 xsl的标签所组成,由 <xsl:stylesheet>
</xsl:stylesheet>这一组标签声明其内容范围区域 。
<?xml version="1.0" encoding=“GB2312"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0" >
样式表 內容 …
</xsl:stylesheet>
第 12章 JSP与 XML
JSP 动态网页新技术 14
样板标签 <xsl:template>则被用来定义每一个作为样式的样版区块
<xsl:template >
样板 內容 …
</xsl:template>
第 12章 JSP与 XML
JSP 动态网页新技术 15
样板
<xsl:template >依据设定的内容决定其用途,本章主要有两种使用方式,一种是直接设定此标签样版内容所要套用的 XML节点 。
<xsl:template match="customers">
样板 內容 …
</xsl:template>
– 其中 match的设定值 customers,代表这个 template标签所要套用的节点,也就是将此标签的内容套用至所有 customers元素的内容,以此样版标的内容为样式作输出 。
让一个样板标签被重复使用,可指定一个名称给它 。
<xsl:template name=funName>
样板 內容 …
</xsl:template>
funName在样式表中被用来识别这个样版标签,以 funName为名称调用此样版即可 。
第 12章 JSP与 XML
JSP 动态网页新技术 16
样板
样版标签另外可以提供参数,供外部传递特定数据 。
<xsl:param name=paraName/>
– <xsl:param>代表这是一个参数,而 name的设定值 paraName则被用来识别此参数 。
如果想要引用已设定 name的样板,则需要使用标签 <xsl:call-
template>。
<xsl:call-template name= templateName >
如果所引用的样板当中包含了参数标签,则必须利用标签
<xsl:with-param>将参数值传递进去 。
<xsl:with-param name=paramName >
第 12章 JSP与 XML
JSP 动态网页新技术 17
数据 存取
想要取得 XML文件结构里特定节点的元素内容,需通过标签
<xsl:value-of> 。
<xsl:value-of select=nodeName />
<xsl:for-each>标签可以对指定的节点下所有的元素进行浏览操作 。
<xsl:for-each select="$customerelement" >
– <xsl:for-each>标签中的 select代表所要浏览的节点名称第 12章 JSP与 XML
JSP 动态网页新技术 18
套用样式表
XML文件的转换主要是通过 Transformer对象来完成,如果想要套用 XSL样式表,则要在建立 Transformer对象的时候,直接指定所要使用的样式表 。
TransformerFactory tff= TransformerFactory.newInstance();
Transformer theTransformer=
tff.newTransformer(XSLFielSource);
第 12章 JSP与 XML
JSP 动态网页新技术 19
JSTL的 XML标签分 类 标 签 说 明核心 标签 <x:parse> 解释 XML文件内容
<x:out> 输出指定 XPath的 XML节点内容
<x:set> 储存指定 XPath的 XML节点内容流程控制 <x:if> 依 XPath判断式,控制程序流程
<x:foreach> 对部份指定的 XML文件内容运行列举循环
<x:choose> 提供容纳 <x:when>与 <x:otherwise>的运行区块
<x:when> <x:choose>区域当中条件为真的判断式
<x:otherwise> 当所有 <x:when>的判断式不成立则运行此区块样式转换 <x:transform> 以指定的 XSLT样板,转换 XML格式
<x:param> 和 <x:transform>标签配合使用。。
第 12章 JSP与 XML
JSP 动态网页新技术 20
<x:parse>
语法 1,通过字符串 (String)或是 Reader对象指定所要解析的 XML文件 。
<x:parse {doc="XMLDocument"|xml1="XMLDocument"}
{var="var" [scope="scope"]|varDom="var" [scopeDom="scope"]}
[systemId="systemId"]
[filter="filter"]/>
语法 2,通过本体内容指定所要解析的 XML文件 。
<x:parse
{var="var" [scope="scope"]|varDom="var" [scopeDom="scope"]}
[systemId="systemId"]
[filter="filter"]>
XML內容文件 …
</x:parse>
第 12章 JSP与 XML
JSP 动态网页新技术 21
<x:parse>-属性属 性 动态 类 型 说 明
doc 是 String,Reader 解释的 XML文件来源
xml 是 String,Reader 同 doc
systemId 是 String 解释 XML文件的系统 ID
filter 是 XMLFilter XML文件滤器
var 否 String 解释后的 XML
scope 否 String var范围
varDom 否 String 储存解释后的 XML,类型为
org.w3c.dom.Document
scopeDom 否 String varDom的范围第 12章 JSP与 XML
JSP 动态网页新技术 22
<x:set>
<x:set select=”XPathExpression” var=”varName”
[scope=”{page|request|session|application}”]/>
– val的变量用来储存 select指定的 XPath对应内容,而其中的
scope则是变量的内容 。
– 一旦通过 <x:set>储存指定的 XPath对应内容,var将只能提供给其它的 XML标签所使用 。
第 12章 JSP与 XML
JSP 动态网页新技术 23
流程控制 -<x:if>
语法 1,无本体内容
<x:if select=”XPathExpression”
var=”varName” [scope=”{page|request|session|application}”]/>
语法 1,包含本体内容
<x:if select=”XPathExpression”
[var=”varName”] [scope=”{page|request|session|application}”]>
本体 內容 …
</x:if>
第 12章 JSP与 XML
JSP 动态网页新技术 24
<x:choose>,<x:when>与 <x:otherwise>
这 3个标签以 <x:choose>为主体,组合成为一个选择性的判断式,其中的 <x:when>
进行相当于 <x:if>标签的判断行为,不过它还可以提供不同的输出结果,当判断条件不符的时候,另外通过 <x:otherwise>输出指定的内容 。
语法,<x:choose>
<x:choose>
本体 內容 (<x:when>和 <x:otherwise>标签 )
</x:choose>
语法,<x:when>
<x:when select=”XPathExpression”>
本体 內容 …
</x:when>
语法,<x:otherwise>
<x:otherwise>
条件式区域 …
</x:otherwise>
第 12章 JSP与 XML
JSP 动态网页新技术 25
<x:choose>,<x:when>与 <x:otherwise>
除了 <x:when>,其它的两个标签均无任何属性需要设 。
<x:choose>标签主要用来界定 <x:when>和 <x:otherwise>位置 。
<x:choose>与 </x:choose>之间,只能包含一个或是一个以上的 <x:when>
标签,而 <x:otherwise>标签可以省略,但是最多只能有一个 。
所有的 <x:when>标签必须在 <x:otherwise>标签出现之前 。
<x:when>标签的 select属性用来设定判断式,当它的运算结果为 true的时候,其中的本体内容被运行,当所有的 <x:when>均为 false的时候,运行
<x:otherwise>当中的本体内容 。
第 12章 JSP与 XML
JSP 动态网页新技术 26
<c:foreach>
当解释的 XML文件包含了一个以上的子节点,则可以用 <c:foreach>标签将其中所有的节点全部读取出来,以列出此标签的相关语法 。
语法
<x:forEach[var=”varName”] select=”XPathExpression”>
[varStatus=”varStatusName”]
[begin=”begin”] [end=”end”] [step=”step”]>
本体 內容 …
</x:forEach>
此 标签会将 select 属性 XPath字符串表示式 XpathExpression,其对应的
XML文件内容区块中所有的子节点一一取出,除此之外,通过 begin、
end和 step3个属性的设定,我们还可以指定取得某特定索引位置的节点内容 。
第 12章 JSP与 XML
JSP 动态网页新技术 27
<c:foreach>-属性属 性 动态类 型 说 明
var 否 String 指定用来储存节点的变量
select 否 String XPath表示式,代表所要浏览的 XML区块
varStatus 否 String 储存列举操作的运行状态
begin 是 int 开始列举的节点位置索引
end 是 int 结束列举的节点位置索引
step 是 int 列举节点的间隔数第 12章 JSP与 XML
JSP 动态网页新技术 28
样式转换
语法 1,无本体内容
<x:transform
{doc=”XMLDocument”|xml1=”XMLDocument”} xslt=”XSLTStylesheet”
[{docSystemId=”XMLSystemId”|xmlSystemId1=”XMLSystemId”}]
[xsltSystemId=”XSLTSystemId”]
[{var=”varName” [scope=”scopeName”]|result=”resultObject”}]
语法 2,指定转换参数的本体内容
<x:transform
{doc=”XMLDocument”|xml1=”XMLDocument”} xslt=”XSLTStylesheet”
[{docSystemId=”XMLSystemId”|xmlSystemId1=”XMLSystemId”}]
[xsltSystemId=”XSLTSystemId”]
[{var=”varName” [scope=”scopeName”]|result=”resultObject”}]
<x:param> actions
</x:transform>
第 12章 JSP与 XML
JSP 动态网页新技术 29
样式转换
语法 3,包含 XML文件与选择性的转换参数
<x:transform
xslt=”XSLTStylesheet”
[{docSystemId=”XMLSystemId”|xmlSystemId1=”XMLSystemId”}]
xsltSystemId=”XSLTSystemId”
[{var=”varName” [scope=”scopeName”]|result=”resultObject”}]
XML Document to parse
optional <x:param> actions
</x:parse>