XSLT 2.0获得不同的节点名称并保留顺序

问题描述 投票:0回答:1

我正在尝试将XML转换为CSV,其中每个条目都不包含所有值。列顺序必须保留。

初始文件:

<?xml version='1.0' encoding='UTF-8'?>
<data>
   <entry>
      <a>FR</a>
      <b>Dupont</b>
      <c>123456</c>
      <d>zzz</d>
      <f>New York</f>
   </entry>
   <entry>
      <a>FR</a>
      <b>Martin</b>
      <c>234561</c>
      <d>xxx</d>
      <e>2019-01-01</e>
      <f>Paris</f>
   </entry>
   <entry>
      <a>FR</a>
      <b>Chris</b>
      <c>345612</c>
      <d>yyy</d>
      <e>2019-01-01</e>
   </entry>
</data>

预期输出:

a;b;c;d;e;f
FR;Dupont;123456;zzz;;New York
FR;Martin;234561;xxx;2019-01-01;Paris
FR;Chris;345612;yyy;2019-01-01;

我正在努力以正确的顺序获取标头值。我尝试了distinct-values()和for-each-group(),但是我无法保留顺序。

我尝试过的一个例子:

<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
exclude-result-prefixes="#all">  

    <xsl:output method="text"/>

    <xsl:template match="/">

            <xsl:for-each select="distinct-values(//entry/*/local-name())">
                <xsl:value-of select="."/>
            </xsl:for-each>

    </xsl:template>
</xsl:stylesheet>

输出:

abcdfe

有什么想法吗?谢谢。

xslt xslt-2.0 xslt-grouping
1个回答
0
投票
尝试一下:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" exclude-result-prefixes="#all"> <xsl:output method="text"/> <xsl:template match="/"> <xsl:for-each select="distinct-values(//entry/*/local-name())"> <xsl:value-of select="concat(.,';')"/> </xsl:for-each> <xsl:for-each select="//entry"> <xsl:text>&#xA;</xsl:text> <xsl:for-each select="*"> <xsl:value-of select="concat(.,';')"/> </xsl:for-each> </xsl:for-each> </xsl:template> </xsl:stylesheet>

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.