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

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

Xalan-JavaXSLT處理器及其分割功能

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

  xml數據有各種各樣的格式。然而,XML文檔中的數據格式不一定符合目標系統的規范。XMLT模板常被采用來把一種格式轉換為另一種格式。不幸的是,XSLT的方法僅僅提供一套有限的功能執行這些轉換。
  
  Apache軟件基金的Xalan項目包括java和C++兩種版本的XSLT處理器。這個處理器提供解析XML文檔的功能,并使用XSLT模板來轉換它們。除了標準的XSLT轉換以外,Xalan也提供一把擴展方法。在擴展庫提供的這些方法中,有一個字符串tokenizer把字符串分割成一組token。
  
  問題領域
  精確的一組XML轉換用tokenize方法。任何時候,當你需要把字符串以一致的樣式分解為子串,可以采用tokenize方法。實際上,tokenize方法是一個XSLT方法,它帶兩個參數。第一個參數指定要被分割的字符串。第二個參數指定把字符串分解為一組字符串token的分隔符。
  
  tokenize方法的結果是一組表示token的節點。這些token和節點可以使用iterator或者作為單個值來處理。你可以用tokenizer把字符串分解為一組單個值,從一個長字符串獲取單個token。
  
  例子
  為了舉例說明tokenize方法的用法,我們看一個使用它的例子。下面是包含需要我們分割的字符串的一個XML文檔:
  
  <CustomerAddress>
  <Address1>9399 W Higgins Street</Address1>
  <Address2>Rosemont, IL 60018</Address2>
  </CustomerAddress>
  這個例子演示了系統的一個客戶地址記錄,包含兩行地址。這是在系統中一個相當普遍的情形,地址信息僅當發郵件時使用,而實際的城市、州和郵編信息并不非凡重要。不幸的是,許多系統希望地址信息被分成城市、州和郵編。需要一個機制把組合的<Address2>元素分成單獨的城市、州和郵編元素。
  
  方案
  為了把數據以恰當的格式提供給目標系統,我使用Xalan的tokenize擴展功能。這個方法基于一組分割符把一個字符串,比如像地址,分割成多個token。假如沒有指定分割符,使用默認的空格符號作為分割符。在我們的例子中,使用的分割符包括空格符號和逗號。
  
  我們從XSLT模板創建表格開始。下面是我們期待的經過轉換得來的輸出:
  
  <CustomerAddress>
  <Address>9399 W Higgins Street</Address>
  <City>Rosemont</City>
  <State>IL</State>
  <Zip>60018</Zip>
  </CustomerAddress>
  正當你看到的那樣,我們想把<Address1>元素轉換成<Address>元素,并把<Address2>元素分割成<City>、<State>和<Zip>元素。為使用tokenize方法,我們如下創建一個模板來調用它:
  
  <?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>
  
  有兩個地方需要非凡注重。第一個在<xsl:stylesheet>元素里面。這里,我們定義了xalan名字空間。這個很重要,因為tokenize方法是xalan名字空間的一部分。假如沒有恰當的名字空間定義,處理器不會知道xalan名字空間。
  
  第二需要注重的是一組叫City, State和Zip的元素。對每一個這些元素,我們調用tokenize方法。tokenize方法總是返回一個nodeset。為了給這些元素提供單個值,必須給nodeset的單個節點賦值。為了做到這一點,我們給tokenize調用的前面添加一個索引(即,[1],[2],[3])。
  這些索引指示出取出哪個token。City是地一個token,State是第二個token,Zip是第三個。
  
  tokenize方法自身帶有兩個參數。第一個參數是我們分割的值(這個例子中是<Address2>元素)。第二個參數是分隔符列表。我們使用包含在字符串‘ ,’――包含一個空格符號和一個逗號中的分隔符分割這個字符串。
  
  在XML轉換中分割字符串很普遍。為了無縫的處理這個問題,Apache XML項目和Xalan組已經添加了一個叫做tokenize的擴展方法來處理XML數據值的分割。訪問Xalan網頁,可以發現更多關于Xalan-Java XSLT處理器和tokenize方法的信息。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 苍山县| 玉林市| 江陵县| 抚顺市| 成都市| 玉田县| 金寨县| 衡东县| 县级市| 大竹县| 垣曲县| 阜新| 井研县| 卢龙县| 双牌县| 宁河县| 甘洛县| 汉阴县| 伊金霍洛旗| 韶关市| 昂仁县| 民乐县| 奉化市| 柏乡县| 无极县| 班玛县| 门源| 炎陵县| 沛县| 安远县| 新乡市| 沧源| 岑巩县| 抚州市| 南充市| 察隅县| 桂平市| 宁南县| 靖江市| 庄河市| 稻城县|