JSTL提供了操作xml文件的標簽庫,使用xml標簽庫可以省去使用Dom和SAX標簽庫的繁瑣,能輕松的讀取xml文件的內容。
1 XML核心標簽庫
1.<x:parse>標簽
<x:parse/>標簽用來解析指定的xml文件。
【語法1】:
<x:parse doc=”xmlDocument” {var=”name”[scope=”page|request|session|application”]|varDom=”name”[scope=”page|request|session|application”]}
systemId=”systemId” filter=”filter”/>
【語法2】:
<x:parse {var=”name”[scope=”page|request|session|application”]|varDom=”name”[scope=”page|request|session|application”]}
systemId=”systemId” filter=”filter”>
xmlDocument
</x:parse>
<x:parse>標簽屬性說明
屬性名:說明:EL:類型:必須:默認值
doc :指定解析的xml文件:是:String/Reader:是:無
var: 存儲解析後的xml文件:否:String:否:無
scope: 指定var的JSP范圍:否:String:否:page
varDom:以(org.w3c.dom.Doucemet)的形式存儲解析的xml文件:否:String:否:無
scopeDom:指定varDom的JSP范圍:否:String:否:page
systemId:xml文件的url: 是:String: 否:無
filter: 解析xml文件的過濾器:否:Org.xml.sax.Filter:否:無
提示:doc指定解析的xml文件並不是指定xml文件的路徑,而是同<c:import>共同使用,由<c:import>加載並存儲,然後使用<x:parse>解析。
例如:如果解析person.xml文件需要通過如下代碼實現對xml文件的解析。
<c:import var="docString" url="person.xml"/><!--引入person.xml文件-->
<x:parse var="doc" doc="${docString}"/>
<c:import>語句用來導入或存儲文件到JSP。如果不使用var來存儲,xml文件將顯式的出現在JSP文件中。
<x:parse>標簽只用來解析xml文件,並不顯示xml文件中的內容,如果想得到xml的節點元素或值需要使用<x:out>元素來實現。
2.<x:out>標簽
<x:out>標簽主要用來輸出xml的信息。
【語法】:
<x:out select=”XpathExperssion”[excapeXml=”true|false”]>
<x:out>標簽屬性說明
屬性名:說明:EL:類型:必須: 默認值
select: 指定使用的XPath語句:否:String:是:無
escapeXml: 是否轉換特殊字符。如<等:否: boolean:是:true
提示:使用XPath語句需要用到xalan.jar支持包,可以從示例程序的lib中獲取,獲得直接從myEclipse中可以找到。
3.<x:set>標簽
<x:set>標簽用於將從xml文件節點解析的內容存儲到JSP屬性范圍中。
【語法】:
<x:set select=”XPathExperssion” var=”name” scope=”page|request|session|application”>
【參數說明】:
(1)select通過指定的XPath表達式語句獲取節點的值。
(2)var指定用於存儲值的變量名。
(3)指定var的JSP屬性范圍。
2 XML流程控制
使用xml標簽庫的流程控制標簽可以迭代處理xml文件的內容,流程控制可以分為以下兩個方面的內容:
(1)條件判斷。
(2)循環功能。
2.1.<x:if>
<x:if>主要用於條件判斷。
【語法1】:未含有本體內容。
<x:if select=”XPathExperssion” var=”name”[scope=”page|request|session|application”]/>
【語法2】:含有本體內容。
<x:if select=”XPathExperssion” var=”name”[scope=”page|request|session|application”]>
本體內容
</x:if>
語法1只把根據條件表達式得到的結果的存儲在JSP范圍中,語法2根據<x:if>標簽根據條件表達式的結果決定是否執行本體內的代碼。
【參數說明】:
(1)select用來指定使用的XpathExperssion表達式。
(2)var設定標量名用來存儲表達式的結果。
(3)scope指定var存儲的JSP屬性范圍。
2.2.<x:choose>、<x:when>和<x:otherwise>標簽
同核心標簽庫的<c:choose>、<c:when>和<c:otherwise>標簽作用相似,只是使用的條件表達式不同。
<x;choose>是主標簽,<x:when>和<x:otherwise>放在<x:choose>標簽體內共同使用。
【語法】:
<x:choose>
<x:when>
<x:when>
<x:otherwise>
</x:choose>
其中只有<x:when>有屬性。
【語法】:
<x:when select=”XPathExperssion”>
2.3.<x:forEach>標簽
<x;forEach>標簽實現了對xml文檔的遍歷。
【語法】:
<x:forEach select=”XPathExperssion”[var=”name”][varStartus=”StartusName”] [begin=”begin”][end=”end”][step=”step”]>
//標簽主體
</x:forEach>
<x:forEach>標簽屬性說明
屬性名:說明: EL:類型:必須:默認值
select:指定使用的XPath語句:否:String:是:無
var:用於存儲表達式的結果:否:String:否:無
varStatus: 用來存放循環到的變量的相關信息:否:String:否:無
begin:循環的起始位置:是:int:否:無
end:循環的終止位置:是:int:否:無
3 xml的文件轉換
<x:transform>和<x:param>能輕易使用XSLT樣式包裝xml文件,成為另一種顯示方式。
1.<x:transform>標簽
使用該標簽可以輕松的實現xml到XSLT的轉化。
【語法1】:
<x:transform doc=”xmldoc” xslt=”XSLTStytlesheet”[docSystemId=”xmlsystemid”][result=”result”][var=”name”][scope=”scopeName”][xsltSystemId=”xsltsystemid”]/>
【語法2】:
<x:transform doc=”xmldoc” xslt=”XSLTStytlesheet”[docSystemId=”xmlsystemid”][result=”result”][var=”name”][scope=”scopeName”][xsltSystemId=”xsltsystemid”]>
<x:param/>
</x:transform>
【語法3】:
<x:transform doc=”xmldoc” xslt=”XSLTStytlesheet”[docSystemId=”xmlsystemid”][result=”result”][var=”name”][scope=”scopeName”][xsltSystemId=”xsltsystemid”]>
Xml文件內容
<x:param/>
</x:transform>
<x:transform>標簽屬性說明
屬性名:說明:EL:類型:必須:默認值
doc:指定xml文件來源:是:String:是:無
xslt:轉化xml的樣式模板:是:String:是:無
docSystemId:xml文件的URI:是:String:否:無
xsltSystemId:xslt文件的URI:是:String:否:無
result:用來存儲轉換後的結果對象:是:java.xml.transform:是:無
var:以org.w3c.dom.Documet類型存儲轉換後的結果:否:String:否:無
scope:var的屬性范圍:否:String:否:無
2.<x:param>標簽
該標簽用來為<x:transform>標簽轉換參數。
【語法1】:
<x:param name=”name” value=”value”/>
【語法2】:
<x:param name=”name” value=”value”>
Value
</x:param>
【參數說明】:
(1)name指定參數的名稱。
(2)value指定參數值。
作者:csdn博客 跬步小流