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

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

Xalan-Java XSLT處理器及其分割功能

2019-11-18 13:16:34
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  xml數(shù)據(jù)有各種各樣的格式。然而,XML文檔中的數(shù)據(jù)格式不一定符合目標(biāo)系統(tǒng)的規(guī)范。XMLT模板常被采用來(lái)把一種格式轉(zhuǎn)換為另一種格式。不幸的是,XSLT的方法僅僅提供一套有限的功能執(zhí)行這些轉(zhuǎn)換。
  
  Apache軟件基金的Xalan項(xiàng)目包括java和C++兩種版本的XSLT處理器。這個(gè)處理器提供解析XML文檔的功能,并使用XSLT模板來(lái)轉(zhuǎn)換它們。除了標(biāo)準(zhǔn)的XSLT轉(zhuǎn)換以外,Xalan也提供一把擴(kuò)展方法。在擴(kuò)展庫(kù)提供的這些方法中,有一個(gè)字符串tokenizer把字符串分割成一組token。
  
  問(wèn)題領(lǐng)域
  精確的一組XML轉(zhuǎn)換用tokenize方法。任何時(shí)候,當(dāng)你需要把字符串以一致的樣式分解為子串,可以采用tokenize方法。實(shí)際上,tokenize方法是一個(gè)XSLT方法,它帶兩個(gè)參數(shù)。第一個(gè)參數(shù)指定要被分割的字符串。第二個(gè)參數(shù)指定把字符串分解為一組字符串token的分隔符。
  
  tokenize方法的結(jié)果是一組表示token的節(jié)點(diǎn)。這些token和節(jié)點(diǎn)可以使用iterator或者作為單個(gè)值來(lái)處理。你可以用tokenizer把字符串分解為一組單個(gè)值,從一個(gè)長(zhǎng)字符串獲取單個(gè)token。
  
  例子
  為了舉例說(shuō)明tokenize方法的用法,我們看一個(gè)使用它的例子。下面是包含需要我們分割的字符串的一個(gè)XML文檔:
  
  <CustomerAddress>
  <Address1>9399 W Higgins Street</Address1>
  <Address2>Rosemont, IL 60018</Address2>
  </CustomerAddress>
  這個(gè)例子演示了系統(tǒng)的一個(gè)客戶地址記錄,包含兩行地址。這是在系統(tǒng)中一個(gè)相當(dāng)普遍的情形,地址信息僅當(dāng)發(fā)郵件時(shí)使用,而實(shí)際的城市、州和郵編信息并不非凡重要。不幸的是,許多系統(tǒng)希望地址信息被分成城市、州和郵編。需要一個(gè)機(jī)制把組合的<Address2>元素分成單獨(dú)的城市、州和郵編元素。
  
  方案
  為了把數(shù)據(jù)以恰當(dāng)?shù)母袷教峁┙o目標(biāo)系統(tǒng),我使用Xalan的tokenize擴(kuò)展功能。這個(gè)方法基于一組分割符把一個(gè)字符串,比如像地址,分割成多個(gè)token。假如沒(méi)有指定分割符,使用默認(rèn)的空格符號(hào)作為分割符。在我們的例子中,使用的分割符包括空格符號(hào)和逗號(hào)。
  
  我們從XSLT模板創(chuàng)建表格開始。下面是我們期待的經(jīng)過(guò)轉(zhuǎn)換得來(lái)的輸出:
  
  <CustomerAddress>
  <Address>9399 W Higgins Street</Address>
  <City>Rosemont</City>
  <State>IL</State>
  <Zip>60018</Zip>
  </CustomerAddress>
  正當(dāng)你看到的那樣,我們想把<Address1>元素轉(zhuǎn)換成<Address>元素,并把<Address2>元素分割成<City>、<State>和<Zip>元素。為使用tokenize方法,我們?nèi)缦聞?chuàng)建一個(gè)模板來(lái)調(diào)用它:
  
  <?xml version="1.0" encoding="UTF-8"?>
  <xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:xalan="http://xml.apache.org/xalan">
  <xsl:template match="/">
  <xsl:for-each select="http://CustomerAddress">
  <Address><xsl:value-of select="Address1"/></Address>
  <City><xsl:value-of select="xalan:tokenize(Address2, ' ,')[1]"/></City>
  <State><xsl:value-of select="xalan:tokenize(Address2, ' ,')[2]"/></State>
  <Zip><xsl:value-of select="xalan:tokenize(Address2, ' ,')[3]"/></Zip>
  </xsl:for-each>
  </xsl:template>
  </xsl:stylesheet>
  
  有兩個(gè)地方需要非凡注重。第一個(gè)在<xsl:stylesheet>元素里面。這里,我們定義了xalan名字空間。這個(gè)很重要,因?yàn)閠okenize方法是xalan名字空間的一部分。假如沒(méi)有恰當(dāng)?shù)拿挚臻g定義,處理器不會(huì)知道xalan名字空間。
  
  第二需要注重的是一組叫City, State和Zip的元素。對(duì)每一個(gè)這些元素,我們調(diào)用tokenize方法。tokenize方法總是返回一個(gè)nodeset。為了給這些元素提供單個(gè)值,必須給nodeset的單個(gè)節(jié)點(diǎn)賦值。為了做到這一點(diǎn),我們給tokenize調(diào)用的前面添加一個(gè)索引(即,[1],[2],[3])。
  這些索引指示出取出哪個(gè)token。City是地一個(gè)token,State是第二個(gè)token,Zip是第三個(gè)。
  
  tokenize方法自身帶有兩個(gè)參數(shù)。第一個(gè)參數(shù)是我們分割的值(這個(gè)例子中是<Address2>元素)。第二個(gè)參數(shù)是分隔符列表。我們使用包含在字符串‘ ,’——包含一個(gè)空格符號(hào)和一個(gè)逗號(hào)中的分隔符分割這個(gè)字符串。
  
  在XML轉(zhuǎn)換中分割字符串很普遍。為了無(wú)縫的處理這個(gè)問(wèn)題,Apache XML項(xiàng)目和Xalan組已經(jīng)添加了一個(gè)叫做tokenize的擴(kuò)展方法來(lái)處理XML數(shù)據(jù)值的分割。訪問(wèn)Xalan網(wǎng)頁(yè),可以發(fā)現(xiàn)更多關(guān)于Xalan-Java XSLT處理器和tokenize方法的信息。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 宾川县| 普宁市| 泗水县| 石阡县| 桂东县| 吉木乃县| 兴仁县| 峨边| 聊城市| 深泽县| 阳城县| 永嘉县| 苍南县| 岑溪市| 青神县| 安远县| 东宁县| 卢龙县| 潜山县| 东乡县| 玛曲县| 长汀县| 马边| 沁源县| 五莲县| 县级市| 新津县| 凤冈县| 龙川县| 监利县| 响水县| 安溪县| 晋城| 隆林| 白朗县| 辉南县| 洞口县| 亳州市| 亳州市| 濮阳县| 沂源县|