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

  

  

原文地址:https://www.cnblogs.com/fangwenyu/p/1586177.html