xml – 用于生成另一个XSLT脚本的XSLT

前端之家收集整理的这篇文章主要介绍了xml – 用于生成另一个XSLT脚本的XSLT前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在这个帖子中,我引用了我的上一个帖子: 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>&#10;</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:...>在输出中.

猜你在找的XML相关文章