zoukankan      html  css  js  c++  java
  • 【原创】XSL 学习(1)

    最近工作中需要把XML文件按照一定的格式转成PDF文件,需要写一些XSL文件把对应的XML文件中的数据按照相应的格式成PDF文件,因此了解了下XSL的基本用法。

    把XML转换成PDF用到的是FOP工具包,主要用法如下:

       1:  private const string COMMAND_LINE = "Tools\\jre\\bin\\java";
       2:  private const string COMMAND_LINE_ARGUMENTS = "-cp Tools\\fop\\lib\\fop.jar;Tools\\fop\\lib\\xml-apis-1.3.02.jar;" +
       3:              "Tools\\fop\\lib\\xercesImpl-2.7.1.jar;Tools\\fop\\lib\\xalan-2.7.0.jar;Tools\\fop\\lib\\serializer-2.7.0.jar;" +
       4:              "Tools\\fop\\lib\\batik-all-1.6.jar;Tools\\fop\\lib\\xmlgraphics-comm+ons-1.2.jar;Tools\\fop\\lib\\avalon-framework-4.2.0.jar;" +
       5:              "Tools\\fop\\lib\\commons-io-1.3.1.jar;Tools\\fop\\lib\\commons-logging-1.0.4.jar org.apache.fop.cli.Main -xml {0} -xsl {1} -pdf \"{2}\"";
       6:   
       7:   
       8:   
       9:  Process aProcess = new Process();
      10:  aProcess.StartInfo.CreateNoWindow = true;
      11:  aProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
      12:  aProcess.StartInfo.FileName = COMMAND_LINE;
      13:  aProcess.StartInfo.Arguments = String.Format(COMMAND_LINE_ARGUMENTS,inputXmlFilePath, inputXslFilePath, outputPdfFilePath);
      14:  aProcess.Start();

    可以看到需要提供三个参数:(1)XML文件 (2)XSL文件 (3)输出的PDF文件路径

    关于XML文件,可以自己写程序生成。这是以前唯一知道的方法,这次用的是通过定义XSD(XML Schema Definition),然后通过XmlSerializer来自动生成XML文件。具体做法,以后再写。

    回到主题上来,接着说XSL的用法。关于XSL的用法,我主要都是从http://www.w3schools.com/Xsl/ 这里学到的,基本上需要用到的时候,在这里面都能找到答案。

    遵循XML的规范,XSL文件开始需要用到的namespace,

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
    

    因为主要是通过FO来格式化XML文件的,所以需要引入xmls:fo。

    XSLT需要能够访问XML中包含的数据,才能对数据进行format。因此首先要知道XSL中怎么来访问/取得 XML文件中的数据。

    举个简单例子,把下面这个XML文件

    <SampleXmlData  ID="962">
        <General>
          <Name>TestName</Name>
          <Description>TestDescription</Description>
        </General>
    </SampleXmlData>

    转换成如下形式:

    ID 962
    Name TestName
    Description TestDescription

      

    显然,首先我们需要把上面XML文件中相应的数据读出来,其中包括两个element数据(Name 和 Description) 和一个Attribute数据(ID)。 可以通过下面的方式来办到,

      

    <xsl:template match="SampleXmlData">
        <fo:table>
           <fo:table-column column-width="50%"/>
           <fo:table-column column-width="50%"/>
    
          <fo:table-body>
              <fo:table-row> 
                 <fo:table-cell><fo:block>ID</fo:block></fo:table-cell>
                 <fo:table-cell>
                    <fo:block><xsl:value-of select="@ID"/></fo:block>
                 </fo:table-cell>
               </fo:table-row>
                     
               <fo:table-row> 
                   <fo:table-cell><fo:block>Name</fo:block></fo:table-cell>
                   <fo:table-cell>
                       <fo:block><xsl:value-of select="General/Name"/></fo:block>
                    </fo:table-cell>
                </fo:table-row>
    
                <fo:table-row> 
                   <fo:table-cell><fo:block>Description</fo:block></fo:table-cell>
                   <fo:table-cell>
                      <fo:block><xsl:value-of select="General/Description"/></fo:block>
                   </fo:table-cell>
                </fo:table-row>
            
            </fo:table-body>
            
       </fo:table>
    </xsl:template>

      

      

    注意对attribute和element的不同的访问方式。对Attribute需要加上前缀“@”。 这里面用到了xsl:template和fo:table,这都是很基本的用法。具体的用法待续。

      

    总结:本文只是XSL学习的第一步,接下来会涉及到XSL的方方面面。

    --To Be Continued--

      

      

  • 相关阅读:
    shell练习--PAT题目1008:数组元素循环右移问题 (失败案例,运行超时)
    shell练习--PAT题目1007:关于素数对(失败案例)
    2019年7月25日 shell练习--PAT题目1006:换个格式输出整数(失败案例)
    shell练习--PAT题目1005:继续(3n+1)猜想(全绿失败喜加一)
    shell练习--关于关联数组自增统计判断的学习
    UITableView中的beginUpdates和endUpdates
    实现类似微信表情包横向滚动翻页的功能,运用UICollectionView,自定义UICollectionViewFlowLayout,cell左右排版 ,支持多组Cell实现。
    利用UICollectionView做的水平滑动分页视图
    获取手势点击哪个控件 UIGestureRecognizer
    JS中如何获取url中的某个参数的值
  • 原文地址:https://www.cnblogs.com/fangwenyu/p/1586177.html
Copyright © 2011-2022 走看看