【发布时间】:2012-11-20 12:30:21
【问题描述】:
在这个帖子中,我指的是我的最后一个帖子: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>
【问题讨论】:
-
其实你不需要两外相解决方案。您需要做的就是提高 Tim 解决方案的大规模效率。您应该问的真正问题是如何进行大规模优化。