2014-05-22 43 views
1

我有一个索引文件,包含的XML文件的列表的过程:在XSLT排序表2.0

<?xml version="1.0" encoding="UTF-8"?> 
<list> 
<part> 
     <numberGroup format="1" start="1"> 
    <entry> 
     <file>04.xml</file> 
      <title>first file</title> 
      <css>stylesheet.css</css> 
    </entry> 
    <entry> 
     <file>05.xml</file> 
      <title>second file</title> 
      <css>stylesheet.css</css> 
    </entry> 
    <entry> 
    <file>06.xml</file> 
      <title>third file</title> 
      <css>stylesheet.css</css> 
     </entry> 
     .... more files 
    </numberGroup> 
    .... more NumberGroups 
    </part> 
    ....more parts 
</list> 

每个文件01.xml等具有一个HTML样式表,就像这样:

<table class='wl'> 
<tr class='header'> 
    <td><p>English</p></td> 
    <td><p>French</p></td> 
</tr> 
<tr> 
    <td><p>belly</p></td> 
    <td><p>ventre</p></td> 
</tr> 
<tr> 
    <td><p>leg</p></td> 
    <td><p>jambe</p>/td> 
</tr> 
... etc 
</table> 

我想将所有的表格(在这个例子中是3)合并成一个,所以我得到了一个有竞争力的词汇表。

到目前为止,我有这个样式表:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
<xsl:template match="/"> 
    <xsl:result-document href="wl.xml"> 
     <xsl:text disable-output-escaping="yes"> 
&lt;!DOCTYPE html&gt; 
     </xsl:text> 
     <html xmlns:epub="http://www.idpf.org/2007/ops" lang="nl" xml:lang="nl"> 
    <head> 
     <title> 
     <xsl:value-of select="./title"/> 
     </title> 
     <xsl:apply-templates select="css"/> 
     </head> 
    <body> 
    <table> 
     <xsl:apply-templates select="//numberGroup[1]/entry"> 
     </xsl:apply-templates> 
    </table> 
    </body> 
    </html> 
    </xsl:result-document> 
    </xsl:template> 
    <xsl:template match="entry"> 
<xsl:apply-templates select="document(file)//table[@class='wl']/tr[not(contains(@class, 'header'))]"/> 
</xsl:template> 
<xsl:template match="tr"> 
    <xsl:copy-of select="."/> 
</xsl:template> 
</xsl:stylesheet> 

根据需要,除了分拣其合并。 如何在第一列按字母顺序排列生成的表?

回答

2

更换

<xsl:apply-templates select="//numberGroup[1]/entry"> 
     </xsl:apply-templates> 

<xsl:apply-templates select="document(//numberGroup[1]/entry/file)//table[@class='wl']/tr[not(contains(@class, 'header'))]"> 
    <xsl:sort select="td[1]" data-type="text"/> 
     </xsl:apply-templates> 

,那么你可以删除模板entry元素。

+0

不错!很有帮助。谢谢。 – Erik

+0

和第二个问题:如何向tr添加一个td(第三列),其中包含/ list/part/numberGroup/entry/title? (“第一个文件”等) – Erik

+0

考虑在此问一个新的,单独的问题。 –