XSLT:从xml生成csv,它有多次出现的标记

时间:2012-07-09 09:41:27

标签: xslt

我有一个格式为的xml: <

G>
 <P>
  <A>
    <b>value b</b>
    <c>value c</c>
   </A>
   <A>
    <b>value b2</b>
    <c>value c2</c>
   </A>
  <D>value e</D>
  <E>value f</E>
 </P>
</G>

有许多标签,如'A',可以多次出现。问题是,如果A出现一次输出CSV,因此xl sheet(数据导出)是:
column1 column2 column3 column4
值b值c值e值f

如果A在xl中输出两次输出为

column1 column2 column3 column4
值b值c值b2值c2值e值f

我想要它作为
column1 column2 column3 column4
值b值c值e值f
值b2值c2值e值f

制作csv我有xslt代码:

 <xsl:value-of select="G/P/A"/>
    <xsl:text>,</xsl:text>
  <xsl:value-of select="D"/>
    <xsl:text>,</xsl:text>
  <xsl:value-of select="E"/>
    <xsl:text>,</xsl:text>

1 个答案:

答案 0 :(得分:1)

这会为您提供您想要的内容,但不会检查您的格式是否与您声明的内容不同

<xsl:for-each select="//A">
    <xsl:value-of select="b"/>
    <xsl:text>,</xsl:text>
    <xsl:value-of select="c"/>
    <xsl:text>,</xsl:text>
    <xsl:value-of select="ancestor::P/D"/>
    <xsl:text>,</xsl:text>
    <xsl:value-of select="ancestor::P/E"/>
    <xsl:text>  
</xsl:text>
</xsl:for-each>

并测试多行:

    <G>
        <P>
            <A>
                <b>value b</b>
                <c>value c</c>
            </A>
            <A>
                <b>value b2</b>
                <c>value c2</c>
            </A>
            <D>value e</D>
            <E>value f</E>
        </P>
        <P>
            <A>
                <b>value bx</b>
                <c>value cx</c>
            </A>
            <A>
                <b>value b2x</b>
                <c>value c2x</c>
            </A>
            <D>value ex</D>
            <E>value fx</E>
        </P>
    </G>

输出

value b,value c,value e,value f  
value b2,value c2,value e,value f  
value bx,value cx,value ex,value fx  
value b2x,value c2x,value ex,value fx