2016-11-16 20 views
0

XSLTを初めて使用しています。下記の入力と出力XMLに対してXSLTを共有してください。単純なXSLTを使用したXMLからXMLへの変換

入力XML:

<Cars> 
    <Car> 
    <Company>Maruthi</Company> 
    <Model>Alto</Model> 
    <FeatureName>CC|Mileage</FeatureName> 
    <FeatureValue>800|20</FeatureValue> 
    </Car> 
    <Car> 
    <Company>Hyundai</Company> 
    <Model>i10</Model> 
    <FeatureName>CC|Mileage|Airbag</FeatureName> 
    <FeatureValue>1000|18|Y</FeatureValue> 
    </Car> 
</Cars> 

出力XML:

<Cars> 
    <Car> 
    <Company>Maruthi </Company> 
    <Model>Alto  </Model> 
    <FeatureName><CC>800</CC><Mileage>20</Mileage></FeatureName> 
    </Car> 
    <Car> 
    <Company>Hyundai </Company> 
    <Model>i10  </Model> 
    <FeatureName><CC>1000</CC><Mileage>18</Mileage><Airbag>Y</Airbag></FeatureName> 
    </Car> 
</Cars> 

出力XMLへの入力を変換するXSLTを提供してください。

ありがとうございました。

+1

へようこそ私たちは、コードの書き込みサービスではありません:-)。あなたが試したことを分かち合い、特定の質問をあなたの既存のコードに頼んでください。質問を編集してください。 –

+0

サンプル入力とサンプル出力は要件の仕様を構成していません。最も有用なプログラムは、可能な範囲の入力を処理する必要があります。 –

答えて

0

これは動作します:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:template match="@*|node()"> 
     <xsl:copy> 
     <xsl:apply-templates select="@*|node()" /> 
     </xsl:copy> 
    </xsl:template> 

     <xsl:template match="Cars/Car/FeatureValue"/> 

    <xsl:template match="Cars/Car/FeatureName"> 
     <xsl:param name="featureNames" select="concat(./text(),'|')"/> 
     <xsl:param name="featureValues" select="concat(following-sibling::FeatureValue/text(),'|')"/> 
     <FeatureName> 
       <xsl:call-template name="features"> 
        <xsl:with-param name="featureNames" select="$featureNames" /> 
        <xsl:with-param name="featureValues" select="$featureValues" /> 
       </xsl:call-template> 
     </FeatureName> 
    </xsl:template> 

    <xsl:template name="features"> 
     <xsl:param name="featureNames"/> 
     <xsl:param name="featureValues"/> 
     <xsl:param name="featureName" select="substring-before($featureNames,'|')"/> 
      <xsl:param name="featureValue" select="substring-before($featureValues,'|')"/> 
     <xsl:choose> 
      <xsl:when test="$featureName"> 
      <xsl:element name="{$featureName}"><xsl:value-of select="$featureValue" /></xsl:element> 
      <xsl:call-template name="features"> 
       <xsl:with-param name="featureNames" select="substring-after($featureNames,'|')" /> 
         <xsl:with-param name="featureValues" select="substring-after($featureValues,'|')" /> 
      </xsl:call-template> 
      </xsl:when> 
     </xsl:choose> 
    </xsl:template> 
</xsl:stylesheet> 
+0

ありがとうSoumik! – user2916849

+1

これがあなたの質問に答えるなら、それを答えたものとしてマークしてください –

関連する問題