国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

用Java增加一個XSLT功能

2019-11-18 15:20:20
字體:
來源:轉載
供稿:網友

  開發XSLT解決方案可以很簡單,只需要少量的工作執行轉換。但是,有時候源文檔和目標文檔是比較復雜的,不同的。很多這種情況下,復雜的轉換是通過等價的XSLT復雜轉換實現的。

有些轉換使用普通的XSLT功能是沒法做到的。這種情況下,你可以使用Apache Xalan XSLT引擎和自定義的java擴展在你的樣式表里加入新函數。

一個例子
讓我們從測試一個簡單的例子開始吧。假設你正在轉換一個xml文檔,你需要在轉換過程中執行很多高級的操作。你也許需要參考歷遍一個數據庫中的表或者訪問一個Web服務。這些函數很簡單,但是XSLT沒有直接提供。

我們假設:有了一個簡單的定購XML文檔,如清單1所示。那么問題是:我們的轉換過程需要翻轉Description元素中的字符。也許,它不符合現實世界中的情況,但是它可以演示了。

清單1:order.xml
〈Order〉
〈Items〉
〈Item〉
〈SKU〉19723〈/SKU〉
〈Description〉Mechawidget Flange〈/Description〉
〈/Item〉
〈Item〉
〈SKU〉87123〈/SKU〉
〈Description〉Hydrafluant Magnet〈/Description〉
〈/Item〉
〈Item〉
〈SKU〉662354〈/SKU〉
〈Description〉Generic Rubber Seal〈/Description〉
〈/Item〉
〈Item〉
〈SKU〉967623〈/SKU〉
〈Description〉Fluxating Plasmatron〈/Description〉
〈/Item〉
〈/Items〉
〈/Order〉
解決方法

我們的解決方法是使用Apache Xalan XSL 處理器,并從它擴展出一個Java類。這個Java組件實現字符串數據的轉換工作。XSL樣式表訪問這個Java類,把XML數據傳進去,在XML結果文檔中顯示返回值。每一步都列在下面了。

Java部分
為了解決這個問題,我們首先需要寫一個完成這個工作的Java代碼。既然這樣,我們將使用一個簡單的字符串翻轉類,如清單2所示:

清單2:Reverse.java

public class Reverse {
public static String reverse(String str) {
String retval = "";
char[] b = new char[str.length()];
str.getChars(0, str.length(), b, 0);
for (int i = (b.length - 1); i 〉= 0; i--) {
retval += b[i];
}
return retval;
}
}

這個類只有一個靜態方法:reverse。這個方法的有一個String參數,返回一個字符串。這個函數將翻轉字符串:從String類從讀取字符到一個字符數組,然后從數組的尾部歷遍字符。

XSLT部分
為了在XSL樣式表中使用Java類,你需要聲明一個XML命名空間。這個命名空間會識別調用Java類的格式。這里有3個不同的命名空間的格式供你使用:我們演示其中一個,Java格式如下:

xmlns:java=http://xml.apache.org/xalan/java

除了要聲明java命名空間外,我們還需要設置〈xsl:stylesheet〉 元素的exclude-result-PRefixes屬性。這個屬性會避免Java命名空間出現在輸出文檔里。

為了在XSL樣式表里正確地調用Java組件,你需要指定類,方法和傳入的參數。類必須以命名空間為前綴。比如,調用我們Reverse類的reverse()方法,就要這樣做:

〈xsl:value-of select="java:Reverse.reverse(′This is a test′)" /〉

傳入的值可以是一個靜態的值(同上)或XML文檔里的值。清單3列出了我們的XSL樣式表,它包含了命名空間的聲明,exclude-result-prefixes屬性和〈Description〉元素的值:調用reverse()方法。

清單3:order.xsl
〈?xml version="1.0"?〉
〈xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:java="http://xml.apache.org/xalan/java"
exclude-result-prefixes="java"〉
〈xsl:output method="xml"/〉
〈xsl:template match="/Order"〉
〈NeWorder〉
〈xsl:apply-templates/〉
〈/NewOrder〉
〈/xsl:template〉
〈xsl:template match="Items/Item"〉
〈Item〉
〈SKU〉〈xsl:value-of select="./SKU" /〉〈/SKU〉
〈Description〉〈xsl:value-of select="java:Reverse.reverse(./Description)" /〉
〈/Description〉
〈/Item〉
〈/xsl:template〉
〈/xsl:stylesheet〉

可重用組件
在樣式表里使用Java類的部分價值是答應你重用Java組件。舉例說,假如你有了一個業務邏輯或者訪問數據倉庫或企業應用的信息的類,那么在你的XSL應用中的重用就很強大了。同樣,你可以重用為其他企業應用的XSL創建的Java擴展。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 祁阳县| 浑源县| 铁岭市| 迁西县| 大渡口区| 阜平县| 洛扎县| 崇礼县| 龙海市| 建昌县| 高雄市| 江门市| 上饶县| 咸丰县| 溆浦县| 台前县| 张北县| 青海省| 兰州市| 抚顺市| 桃江县| 汉沽区| 井研县| 清镇市| 道孚县| 庆阳市| 丁青县| 安新县| 钦州市| 楚雄市| 法库县| 乌兰浩特市| 手游| 长沙市| 静乐县| 吴忠市| 新和县| 丹棱县| 象山县| 永康市| 昌平区|