2017-08-29 2 views
0

Ci-dessous mon exigence je entrée de commande contient l'article et chaque article contient des sous produits, mais le nom de Tag est même « Item ».Comment maintenir une même structure de la source à cible si les parents et les balises xml enfant a le même nom dans xslt

<OrderInput> 
    <Item> 
     <ItemId> 
     <ItemName> 
     <ItemDesc> 
     <Item> 
      <ItemId> 
      <ItemName> 
      <ItemDesc> 
      <Item> 
       <ItemId> 
       <ItemName> 
       <ItemDesc> 
      </Item> 
     </Item> 
    </Item> 
    <Item> 
     <ItemId> 
     <ItemName> 
     <ItemDesc> 
     <Item> 
      <ItemId> 
      <ItemName> 
      <ItemDesc> 
     </Item> 
    </Item> 
</OrderInput> 

Après transformation en utilisant xslt, il devrait ressembler à ci-dessous. Les nœuds parent et chils ont le même nom "Line" comme source "Item"

<OrderOutput> 
    <OrderLine> 
    <Line> 
     <LineId> 
     <LineName> 
     <LineDesc> 
     <Line> 
      <LineId> 
      <LineName> 
      <LineDesc> 
      <Line> 
       <LineId> 
       <LineName> 
       <LineDesc> 
      </Line> 
     </Line> 
    </Line> 
    <Line> 
     <LineId> 
     <LineName> 
     <LineDesc> 
     <Line> 
      <LineId> 
      <LineName> 
      <LineDesc> 
     </Line> 
    </Line> 
</OrderOutput> 

Aidez-moi à résoudre ce problème.

+1

Où que 'OrderLine' dans la sortie viennent et pourquoi est-il pas fermé? –

+0

Désolé..J'ai raté..s'il vous plaît –

Répondre

1

vous pouvez utiliser le remplacer dans le nom de l'élément tout en transformant

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="2.0"> 
    <xsl:output indent="yes"/> 

    <xsl:template match="OrderInput"> 
     <OrderOutput> 
      <xsl:apply-templates/> 
     </OrderOutput> 
    </xsl:template> 

    <xsl:template match="*[starts-with(name(.), 'Item')]"> 
     <xsl:element name="{replace(name(.), '^Item', 'Line')}"> 
      <xsl:apply-templates/> 
     </xsl:element> 
    </xsl:template> 
</xsl:stylesheet> 
+0

Salut Rupesh..Merci de réponse rapide ... Mon exigence n'est pas le remplacement de la chaîne ... à titre illustratif seulement j'ai donné le format de sortie. –

+0

@VamsiKrishna pour cela vous pouvez simplement convertir en élément de mappage d'élément, pour l'élément imbriqué si vous ne changez pas de mappage de document que cela n'aurait pas d'effet en sortie. Tout comme le premier modèle de code ci-dessus. – Rupesh