Cyh的博客

          Email:kissyan4916@163.com
          posts - 26, comments - 19, trackbacks - 0, articles - 220

          用XSLT轉換XML

          Posted on 2009-12-20 20:34 啥都寫點 閱讀(2076) 評論(0)  編輯  收藏 所屬分類: J2SE
              XSL(eXtensible Stylesheet Language)是一種XML格式的文檔,常用于定義文件的樣式,比如可以用XSL定義一個HTML的樣式。
              XSLT(XSL Transformations)是一種將XML文檔按照XSL定義的樣式進行轉換的技術。比如XSLT可以按照XSL將XML文檔轉換成HTML文檔。

                在Java中,通過JAXP(Java API for XML Processing)技術實現XSLT。
                TransformerFactory是XSLT引擎的工廠,它的newTransformer方法創建XSLT引擎Transformer,如果再創建時指定Source,則創建的XSLT引擎將按照Source進行轉換。可以用XSL文件構造Source,那么使用了改Source的引擎將按照XSL文檔定義的樣式對XML文檔進行轉換。
                通過Transformer的getOutputProperties方法獲得XSLT引擎的輸出屬性,OutputKeys.ENCODING屬性表示輸出的字符編碼,OutputKeys.METHOD表示輸出的文件格式,如html、text、xml等。
                Transformer的transform方法將Source轉換成Result,其中Source為待轉換的XML文件的Source,Result為目標文檔的Result。


          import java.io.File;
          import java.util.Properties;

          import javax.xml.transform.OutputKeys;
          import javax.xml.transform.Transformer;
          import javax.xml.transform.TransformerFactory;
          import javax.xml.transform.stream.StreamResult;
          import javax.xml.transform.stream.StreamSource;

          /**
           * 使用JAXP根據XSL轉換XML文檔
           * JAXP是Java API for XML Processing的英文字頭縮寫,
           * 中文含義是:用于XML文檔處理的使用Java語言編寫的編程接口。
           * JAXP支持DOM、SAX、XSLT等標準。
           
          */

          public class JAXPTransform {

              
          /**
               * 使用XSLT將XML文檔轉換成HTML
               * 
          @param xmlFileName    源XML文件名
               * 
          @param xslFileName    XSL文件名
               * 
          @param htmlFileName    輸出的HTML文件名
               * 
          @return    返回HTML文件名
               
          */

              
          public static String xml_xslt_html(String xmlFileName, String xslFileName, 
                      String htmlFileName)
          throws Exception{
                  
          // 創建XSLT引擎的工廠
                  TransformerFactory tFactory = TransformerFactory.newInstance();
                  
          // 創建XSLT引擎要使用的XSL文件源
                  StreamSource source = new StreamSource(new File(xslFileName));
                  
          // 創建XSLT引擎
                  Transformer tx = tFactory.newTransformer(source);
                  
                  
          // 設置XSLT引擎的輸出屬性,使之輸出為HTML格式,并且支持中文。
                  Properties properties = tx.getOutputProperties(); 
                  properties.setProperty(OutputKeys.ENCODING,
          "GB2312");
                  properties.setProperty(OutputKeys.METHOD, 
          "html");
                  tx.setOutputProperties(properties); 
                  
                  
          // 創建XML文件源和HTML文件的結果流
                  StreamSource xmlSource = new StreamSource(new File(xmlFileName));
                  File targetFile 
          = new  File(htmlFileName);
                  StreamResult result 
          = new StreamResult(targetFile);
                  
                  
          // 實現XSLT轉換,根據XSL文件源將XML文件源轉換成HTML結果流
                  tx.transform(xmlSource,    result);
                  
                  
          return targetFile.getAbsolutePath();
              }

              
              
          public static void main(String[] args) throws Exception {
                  
                  String xmlFileName 
          = "students.xml";
                  String xslFileName 
          = "students.xsl";
                  String targetFileName 
          = "students.html";
                  
                  JAXPTransform.xml_xslt_html(xmlFileName, xslFileName, targetFileName);
              }

          }

             students.xsl定義了目標HTML的樣式,將XML文檔的相關屬性用HTML顯示出來,具體內容如下:

          <?xml version="1.0"  encoding="GB2312"?>
          <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
          <xsl:template match="/">
          <html>
          <head><title>學生信息</title></head>
          <body>
              <table border="1">
              <tr>
                  <th>姓名</th>
                  <th>年齡</th>
                  <th>電話</th>
              </tr>

              <xsl:for-each select="學生花名冊/學生">
                  <tr>
                      <td><xsl:value-of select="姓名"/></td>
                      <td><xsl:value-of select="年齡"/></td>
                      <td><xsl:value-of select="電話"/></td>
                  </tr>
              </xsl:for-each>
              </table>

          </body></html>
          </xsl:template>
          </xsl:stylesheet>








































                                                                                                                 --    學海無涯
                  

          主站蜘蛛池模板: 柳江县| 浮山县| 永仁县| 修文县| 理塘县| 漠河县| 镇江市| 宣城市| 元朗区| 崇明县| 竹北市| 朔州市| 宁阳县| 镇沅| 德格县| 博客| 旌德县| 台州市| 滨州市| 呈贡县| 柳江县| 和平县| 贺州市| 田东县| 鹤岗市| 五台县| 东至县| 怀来县| 山阴县| 平乐县| 呼玛县| 香河县| 固安县| 台前县| 磐安县| 威海市| 延安市| 新巴尔虎左旗| 仁寿县| 饶河县| 伊春市|