• 【原创】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--

      

      

  • 相关阅读:
    一起来构建前端工具链吧~(新建项目)
    我的前端故事----高仿支付宝密码输入框
    我的前端故事----疯狂倒计时(requestAnimationFrame)
    Oracle 导入导出SQL 查看登录用户表个数
    Oracle11g使用exp导出空表
    Spring Boot(二)Application events and listeners
    Spring Boot(一)启动方式
    Android BroadcastReceiver
    钱格式化
    Intellij idea 快键键
  • 原文地址:https://www.cnblogs.com/fangwenyu/p/1586177.html
Copyright © 2020-2023  润新知