使用XSLT将XML分割成多个HTML文件 [英] Split XML into multiple HTML files using XSLT

查看:128
本文介绍了使用XSLT将XML分割成多个HTML文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

一个例子xml:

p>

An example xml:

<?xml version="1.0" encoding="ISO-8859-1"?>

<table>
  <row>
    <name>user1</name>
    <email>email1</email>
  </row>
  <row>
    <name>user2</name>
    <email>email2</email>
  </row>
  <row>
   <name>user3</name>
   <email>email3</email>
  </row>
  <row>
    <name>user4</name>
    <email>email4</email>
  </row>
  <row>
    <name>user5</name>
    <email>email5</email>
  </row>

  ...

</table>

现在我想将这个xml文件分成不同的HTML文件,这些文件包含XML文件中特定的范围。例如,每个HTML文件应该包含来自XML的3行。

Now I want to split this xml file into different HTML files which contain a specific range from the XML file. Each HTML file should contain 3 rows from the XML for example.

table1.html

<table>
  <tr>
    <td>user1</td>
    <td>email1</td>
  </tr>
  <tr>
    <td>user2</td>
    <td>email2</td>
  </tr>
  <tr>
    <td>user3</td>
    <td>email3</td>
  </tr>
</table>

table2.html

<table>
  <tr>
    <td>user4</td>
    <td>email4</td>
  </tr>
  <tr>
    <td>user5</td>
    <td>email5</td>
  </tr>
  <tr>
    <td>user6</td>
    <td>email6</td>
  </tr>
</table>

任何人都知道XSLT文件需要如何格式化?我使用 ruby​​-xslt 加载XML和XSLT文件,并将整个事件转换为HTML 。

Anyone an idea how the XSLT file needs to be formatted? I'm using ruby-xslt to load the XML and XSLT file and convert the whole thing to HTML.

推荐答案

如果您将此XSLT应用于您的输入XML,它会将XML分成包含3条记录的表:

If you apply this XSLT to your input XML it will split the XML into tables containing 3 records:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:strip-space elements="*"/>
<xsl:output indent="yes" method="xml"/>

<xsl:template match="node()|@*">
    <xsl:copy>
        <xsl:apply-templates select="node()|@*"/>
    </xsl:copy>
</xsl:template>
<!-- split file up into row elements -->
<xsl:template match="row[position() mod 3 = 1]">
    <table>
        <xsl:copy-of select=".|following-sibling::row[not(position() > 2)]"/>
    </table>
</xsl:template>

<xsl:template match="row"/>
</xsl:stylesheet>

输出XML:

OUTPUT XML:

<?xml version="1.0" encoding="UTF-8"?>
<table>
<table>
    <row>
        <name>user1</name>
        <email>email1</email>
    </row>
    <row>
        <name>user2</name>
        <email>email2</email>
    </row>
    <row>
        <name>user3</name>
        <email>email3</email>
    </row>
</table>
<table>
    <row>
        <name>user4</name>
        <email>email4</email>
    </row>
    <row>
        <name>user5</name>
        <email>email5</email>
    </row>
</table>
</table>

如果您通过此XSLT运行OUTPUT XML,您将得到想要的结果:

If you run the OUTPUT XML through this XSLT you will get the wanted result:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:template match="node()|@*">
    <xsl:copy>
        <xsl:apply-templates select="node()|@*"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="row">
    <tr>
        <xsl:apply-templates select="node()|@*"/>
    </tr>
</xsl:template>

<xsl:template match="email | name">
    <td>
        <xsl:apply-templates select="node()|@*"/>
    </td>
</xsl:template>


</xsl:stylesheet>

final OUTPUT XML:

final OUTPUT XML:

    <?xml version="1.0" encoding="UTF-8"?><table>
<table>
    <tr>
        <td>user1</td>
        <td>email1</td>
    </tr>
    <tr>
        <td>user2</td>
        <td>email2</td>
    </tr>
    <tr>
        <td>user3</td>
        <td>email3</td>
    </tr>
</table>
<table>
    <tr>
        <td>user4</td>
        <td>email4</td>
    </tr>
    <tr>
        <td>user5</td>
        <td>email5</td>
    </tr>
</table>
</table>

在我看来,只要您有机会运行2个样式表,就可以使用XSLT 1.0您的输入XML。

In my opinion this should work with XSLT 1.0 as long as you have the opportunity to run 2 stylesheets on your input XML.

祝好,
彼得

这篇关于使用XSLT将XML分割成多个HTML文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆