在这个帖子中,我引用了我的上一个帖子:
Convert XML to CSV using XSLT – dynamic columns.
引用线程中的XSLT脚本工作正常但是使用大型XML文档时性能不佳.现在我想编写一个XSLT脚本,输出另一个XSLT脚本,该脚本将输出最终的CSV文件.
题:
如何编写第一个XSLT脚本?输出应如下所示:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" indent="yes"/> <xsl:template match="/*"> <xsl:text>Name;</xsl:text> <xsl:text>Brother;</xsl:text> <xsl:text>Sister</xsl:text> <-- this part is dynamic --> <xsl:apply-templates select="Person" /> </xsl:template> <xsl:template match="Person"> <xsl:value-of select="Name" /> <xsl:value-of select="Brother" /> <xsl:value-of select="Sister" /> <-- this part is dynamic too --> <xsl:text> </xsl:text> </xsl:template> </xsl:stylesheet>
输入的XML文件与引用的线程中的相同:
<Person> <Name>John</Name> <FamilyMembers> <FamilyMember> <Name>Lisa</Name> <Type>Sister</Type> </FamilyMember> <FamilyMember> <Name>Tom</Name> <Type>Brother</Type> </FamilyMember> </FamilyMembers> </Person> <Person> <Name>Daniel</Name> <FamilyMembers> <FamilyMember> <Name>Peter</Name> <Type>Father</Type> </FamilyMember> </FamilyMembers> </Person>
对于每个不同的类型元素,在生成的XSLT脚本中应该有如下所示的一行:
<xsl:text>Type;</xsl:text>
要编写一个输出另一个XSLT的XSLT,您需要使用< xsl:element>生成输出元素,例如
<xsl:element name="xsl:text">
或使用< xsl:namespace-alias>如果要使用文字结果元素. XSLT spec有一个例子:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:axsl="http://www.w3.org/1999/XSL/TransformAlias"> <xsl:namespace-alias stylesheet-prefix="axsl" result-prefix="xsl"/> <xsl:template match="/"> <axsl:stylesheet> <xsl:apply-templates/> </axsl:stylesheet> </xsl:template>
任何< axsl:...>样式表中的元素将变为< xsl:...>在输出中.