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--

      

      

  • 相关阅读:
    NLP——天池新闻文本分类 基于深度学习的文本表示
    NLP——天池新闻文本分类 Task4:fasttext深度学习
    NLP——天池新闻文本分类 TASK3
    Python基础Task3:异常处理
    Python基础TASK2:条件语句与循环语句
    React开发入门:以开发Todo List为例
    [MIT 18.06 线性代数]Intordution to Vectors向量初体验
    [Java Tutorial学习分享]接口与继承
    FutureTask源码分析(JDK7)
    KMP(超详细复杂度分析)
  • 原文地址:https://www.cnblogs.com/fangwenyu/p/1586177.html
Copyright © 2011-2022 走看看