使用XSLT将XML拆分为多个HTML文件
我正在寻找一种将XML文件拆分为多个HTML文件的方法,这些文件最终应该包含一个表 xml示例:使用XSLT将XML拆分为多个HTML文件,html,ruby,xml,xslt,Html,Ruby,Xml,Xslt,我正在寻找一种将XML文件拆分为多个HTML文件的方法,这些文件最终应该包含一个表 xml示例: <?xml version="1.0" encoding="ISO-8859-1"?> <table> <row> <name>user1</name> <email>email1</email> </row> <row> <name>user
<?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>
用户1
电子邮件1
用户2
电子邮件2
用户3
电邮3
用户4
电子邮件4
用户5
电子邮件5
...
现在,我想将这个xml文件拆分为不同的HTML文件,其中包含xml文件的特定范围。例如,每个HTML文件应该包含来自XML的3行
表1.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>
<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>
用户1
电子邮件1
用户2
电子邮件2
用户3
电邮3
表2.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>
<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>
用户4
电子邮件4
用户5
电子邮件5
用户6
电子邮件6
有人知道XSLT文件需要如何格式化吗?我正在使用加载XML和XSLT文件,并将整个内容转换为HTML。如果将此XSLT应用于输入XML,它会将XML拆分为包含3条记录的表:
<?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:
<?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>
<?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>
用户1
电子邮件1
用户2
电子邮件2
用户3
电邮3
用户4
电子邮件4
用户5
电子邮件5
如果通过此XSLT运行输出XML,您将得到想要的结果:
<?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>
最终输出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>
<?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>
用户1
电子邮件1
用户2
电子邮件2
用户3
电邮3
用户4
电子邮件4
用户5
电子邮件5
在我看来,只要您有机会在输入XML上运行两个样式表,XSLT1.0就可以使用这种方法
致以最良好的祝愿,
Peter要在一次XSLT转换中创建多个HTML文件,您需要xsl:result文档说明,该说明仅在XSLT 2.0中可用。不幸的是,ruby xslt无法实现这一点。XSLT1.0转换只能创建一个输出 您可能仍然有一个包含所有生成表的结果。然后,您需要在XSLT之外处理这个结果(或对其执行N个转换),以便生成所需的N个单独的输出 我强烈建议您使用XSLT 2.0完成此任务——使用新的指令可以轻松完成此任务