使用xsl将xml转换为flat

时间:2018-01-08 12:01:44

标签: xml xslt

我有一个xml作为样本在

下面
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<local>
<file Date="2211-11-05"  Source="ABC"/>
<group div="Global" >
<scenario type="XYZ" >
    <pqr liab="123">
        <ten unit="DAY">10 12 </ten>
        <p>0 </p>
    </pqr>
    <abc asset="100">
        <ten unit="DAY">11 12 </ten>
        <exp>0 </exp>
    </abc>
</scenario>
<Feature rating="NA" />
</group>
</local>

我想用csv格式转换它,如下所述:

div,type,liab,unit,ten,p,asset,unit2,ten2,exp,rating
Global,XYZ,123,DAY,10 12,0,100,DAY,11 12,10,NA

我已经编写了一个示例xsl,如下所示,但它没有捕获p,ten,exp等的标记值。请帮忙。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ns2="http://www.example.org/B3">
<xsl:output method="text" omit-xml-declaration="yes" indent="no"/>
<xsl:template match="/">
  <xsl:text></xsl:text>
  <xsl:text>&#xA;</xsl:text>
  <xsl:for-each select="//exp">
    <xsl:value-of select="ancestor::group/@div" /><xsl:text>,</xsl:text>
    <xsl:value-of select="ancestor::group/scenario/@type" /><xsl:text>,</xsl:text>  
    <xsl:value-of select="ancestor::group/scenario/pqr/@liab" /><xsl:text>,</xsl:text>
    <xsl:value-of select="ancestor::group/scenarioI /pqr/ten/@unit" /><xsl:text>,</xsl:text>
    <xsl:value-of select="ancestor::group/scenario/pqr/@ten" /><xsl:text>,</xsl:text>
    <xsl:value-of select="ancestor::group/scenario/pqr/@p" /><xsl:text>,</xsl:text>
    <xsl:value-of select="ancestor::group/scenario/abc/@asset" /><xsl:text>,</xsl:text>
    <xsl:value-of select="ancestor::group/scenario/abc/ten/@unit" /><xsl:text>,</xsl:text>
    <xsl:value-of select="ancestor::group/scenario/abc/@ten" /><xsl:text>,</xsl:text>
    <xsl:value-of select="ancestor::group/scenario/abc/@exp" /><xsl:text>,</xsl:text>
    <xsl:value-of select="ancestor::group/Feature/@rating" /><xsl:text>,</xsl:text>
    <xsl:text>&#xA;</xsl:text>
  </xsl:for-each>
   </xsl:template>
  </xsl:stylesheet>

1 个答案:

答案 0 :(得分:1)

更改

    <xsl:value-of select="ancestor::group/scenario/pqr/@ten"/><xsl:text>,</xsl:text>
    <xsl:value-of select="ancestor::group/scenario/pqr/@p"/><xsl:text>,</xsl:text>
    <xsl:value-of select="ancestor::group/scenario/abc/@exp"/><xsl:text>,</xsl:text>

        <xsl:value-of select="ancestor::group/scenario/pqr/ten"/><xsl:text>,</xsl:text>
        <xsl:value-of select="ancestor::group/scenario/pqr/p"/><xsl:text>,</xsl:text>
        <xsl:value-of select="ancestor::group/scenario/abc/exp"/><xsl:text>,</xsl:text>

因为elements不是attribute