试试这样的东西。它将在元素文本之前输出任何属性。
XML 输入
<projects>
<project>
<name ID="A">Shockwave</name>
<language>Ruby</language>
</project>
<project>
<name ID="B">Other</name>
<language>Erlang</language>
</project>
</projects>
XSLT 1.0
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:strip-space elements="*"/>
<xsl:template match="project">
<xsl:apply-templates select="@*|node()"/>
<xsl:text>
</xsl:text>
</xsl:template>
<xsl:template match="@*">
<xsl:value-of select="."/>
<xsl:if test="../text() or parent::project">
<xsl:text>,</xsl:text>
</xsl:if>
</xsl:template>
<xsl:template match="*[ancestor::project]">
<xsl:apply-templates select="@*"/>
<xsl:if test="preceding-sibling::*">
<xsl:text>,</xsl:text>
</xsl:if>
<xsl:value-of select="."/>
</xsl:template>
</xsl:stylesheet>
输出
A,Shockwave,Ruby
B,Other,Erlang
编辑新要求
XML 输入
<projects>
<project>
<name ID="A" StartDate='2012-01-01' EndDate='2012-01-30'>Shockwave</name>
<language>Ruby</language>
<Manager ID="M1">Nathan</Manager>
</project>
<project>
<name ID="B" StartDate='2012-01-01' EndDate='2012-02-30'>Other</name>
<language>Erlang</language>
<Manager ID="M2">Kristi</Manager>
</project>
</projects>
XSLT 1.0
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:strip-space elements="*"/>
<xsl:template match="project">
<xsl:apply-templates select="@*|node()"/>
<xsl:text>|</xsl:text>
</xsl:template>
<xsl:template match="@*">
<xsl:if test="count(parent::*/@*)=1 and not(parent::project)">
<xsl:text>;</xsl:text>
</xsl:if>
<xsl:value-of select="."/>
<xsl:if test="parent::project or (last())">
<xsl:text>;</xsl:text>
</xsl:if>
</xsl:template>
<xsl:template match="*[ancestor::project]">
<xsl:apply-templates select="@*"/>
<xsl:if test="preceding-sibling::* and not(@*)">
<xsl:text>;</xsl:text>
</xsl:if>
<xsl:value-of select="."/>
</xsl:template>
</xsl:stylesheet>
输出
A;2012-01-01;2012-01-30;Shockwave;Ruby;M1;Nathan|B;2012-01-01;2012-02-30;Other;Erlang;M2;Kristi|