将XML转换为Pipe delimeted CSV

时间:2018-06-15 10:05:40

标签: xslt xslt-2.0

我正在将XML转换为Pipe delimeted CSV。因此,第一列值我想将字符串拆分为2个字符,剩下的应该在同一行的下面。但是,在这里,我将在第一行的下一行获得剩余的字符串。但我想进入相同的excel单元格

我使用<xsl:text>&#10;</xsl:text>

请在下面找到截图。

enter image description here

以上屏幕截图13的值应低于12。

以下是XML示例:

<Family>
<Parent>
    <Boy>
        <name>Ram</name>
        <Age>05</Age>
    </Boy>
    <Girl>
        <name>Sita</name>
        <Age>06</Age>
    </Girl>
    <Girl>
        <name>Pooja</name>
        <Age>15</Age>
    </Girl>
</Parent>
<Parent>
    <Boy>
        <name>Ramesh</name>
        <Age>10</Age>
    </Boy>
    <Girl>
        <name>Geeta</name>
        <Age>26</Age>
    </Girl>
</Parent>
</Family>

以下是使用的XSLT:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="Family">
    <xsl:for-each select="Parent">
        <xsl:for-each select="Boy">
            <xsl:if test="name!=''">
                <xsl:value-of select="name"/>
            </xsl:if>
        </xsl:for-each>|<xsl:for-each select="Girl">
            <xsl:if test="name!=''">
                <xsl:value-of select="name"/>
            </xsl:if>
        </xsl:for-each>|<xsl:value-of select="'&#13;&#10;'" disable-output-escaping="yes"/>
    </xsl:for-each>
</xsl:template>
</xsl:stylesheet> 

观察输出:

Ram|SitaPooja|
Ramesh|Geeta| 

预期产出: 请参阅以下屏幕截图以获取预期输出 enter image description here

说明: 我希望CSV文件中的每个父项的子项名称。因此,如果父母有一个男孩和一个女孩,我们将在一行中用管道分隔符分隔孩子的名字。

但是第一个家长有两个女孩,所以我希望Sita和Pooja应该在CSV文件的同一个单元格中低于另一个。但目前我们正在接受另一个。

由于

1 个答案:

答案 0 :(得分:0)

如果你希望它在第二列上,那么你需要为第一列提供一些值。