2010-03-29 9 views
0

J'ai besoin d'aide pour obtenir des valeurs de clé primaire répétées fois depuis le fichier xml. Voici le fichier xml.Obtenir la colonne clé dans la boucle + XSLT

<?xml version="1.0" encoding="UTF-8"?> 
<request id="test"> 
<dataSets> 
<dataSet name="dim_table" friendlyName="dim" tableType="DIM"> 
<fields> 
    <field name="customer_id" dataType="varchar" primaryKey="true"/> 
    <field name="customer_name" dataType="VARCHAR" primaryKey="false"/> 
    <field name="customer_address" dataType="CHAR" primaryKey="false"/> 
</fields> 
</dataSet> 
</dataSets> 
</request> 

la puissance requise est

KeycolumnName, Columnname
customer_id, CUSTOMER_ID
customer_id, customer_name
customer_id, customer_address

Quelqu'un peut-il me aider à ce sujet?

+0

Le XML exemple ne décrit pas qui les nœuds se répètent (ce qui fait une grande différence dans le XSL requis pour transformer le XML). – David

+0

La sortie requise semble confuse. Le même customer_id est-il attendu sur chaque ligne de sortie? customer_id et customer_name ne sont pas disponibles sur la même itération sauf si vous itérez parmi les nœuds "fields" – David

+0

N'oubliez pas d'upvoter et/ou d'accepter les réponses si elles vous aident (si vous avez assez de réputation pour le faire). THX! – David

Répondre

0

formatage XML est nécessaire pour une réponse complète, mais:

<xsl:template match="/dataSets/dataSet/fields"> 
    <xsl:for-each select="field"> 
     <xsl:value-of select="@name" /> 
    </xsl:for-each> 
</xsl:template> 

(exemple de code non testé)

Utilisez XPath pour définir le contenu de la "sélectionner" les attributs.

Référence: http://www.w3schools.com/xsl/el_for-each.asp

0

code mis à jour (réponse précédente ne pouvait pas gérer autant nouveau code):

Ce code fonctionne pour moi:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="/"> 
     <xsl:for-each select="//dataSet"> 
      <xsl:for-each select="fields/field"> 
       KeyColumnName="<xsl:value-of select="../field[@primaryKey='true']/@name" />" ColumnName="bar <xsl:value-of select="@name" />" 
      </xsl:for-each> 
     </xsl:for-each> 
    </xsl:template> 
</xsl:stylesheet> 
+0

Note: Le KeyColumnName sera une concaténation de _all_ KeyColumnNames (pas seulement le premier) s'il y a plusieurs nœuds "field" dans le même nœud "fields" qui correspondent [primaryKey = 'true'] – David

+0

Merci beaucoup David.I obtenu ma sortie requise. – rajcog