我正在尝试创建一个XSLT来将XML转换为CSV。在搜索时我发现了很多例子,但我没有找到任何与动态XML节点相关的例子,这些例子没有重复。这里放置我的XML和预期输出任何人都知道如何获得以下输出请分享我。
我的XML是
<SttlmOblgtnRpt>
<RptParams>
<RptId>02</RptId>
<RptDtAndTm>
<DtTm>2016-12-12T00:00:00</DtTm>
</RptDtAndTm>
</RptParams>
<Pgntn>
<PgNb>11</PgNb>
<LastPgInd>true</LastPgInd>
</Pgntn>
<ClrMmb>
<PrtryId>
<Id>210016</Id>
<Issr>MEMBER</Issr>
</PrtryId>
</ClrMmb>
</SttlmOblgtnRpt>
我的预期输出是
RptId,DtTm,PgNb,LastPgInd,Id,Issr
02,2016-12-12T00:00:00,1,真实,210016 MEMBER
谢谢, 马赫什。
答案 0 :(得分:0)
你的问题并不完全清楚。听起来你想输出一行数据,每个叶子节点都有一个单元格:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="UTF-8" />
<xsl:template match="/">
<xsl:variable name="data" select="//*[not(*)]" />
<!-- header -->
<xsl:for-each select="$data">
<xsl:value-of select="name()" />
<xsl:if test="position()!=last()">
<xsl:text>,</xsl:text>
</xsl:if>
</xsl:for-each>
<xsl:text> </xsl:text>
<!-- data -->
<xsl:for-each select="$data">
<xsl:value-of select="." />
<xsl:if test="position()!=last()">
<xsl:text>,</xsl:text>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
应用于您的输入示例,结果将是:
RptId,DtTm,PgNb,LastPgInd,Id,Issr
02,2016-12-12T00:00:00,11,true,210016,MEMBER