У меня есть xml документ, подобный этому:
<person_database>
<person_data>
<person_id>123456</person_id>
<person_skill>
<person_skill_name> Musician</person_skill_name>
<person_skill_id> 1 </person_skill_id>
</person_skill>
<person_skill>
<person_skill_name> Chef</person_skill_name>
<person_skill_id> 2 </person_skill_id>
</person_skill>
<person_skill>
<person_skill_name> Programmer</person_skill_name>
<person_skill_id> 3 </person_skill_id>
</person_skill>
</person_data>
<person_data>
<person_id>654321</person_id>
<person_skill>
<person_skill_name> Musician</person_skill_name>
<person_skill_id> 1 </person_skill_id>
</person_skill>
<person_skill>
<person_skill_name> Chef</person_skill_name>
<person_skill_id> 2 </person_skill_id>
</person_skill>
<person_skill>
<person_skill_name> Programmer</person_skill_name>
<person_skill_id> 3 </person_skill_id>
</person_skill>
<person_skill>
<person_skill_name> Doctor</person_skill_name>
<person_skill_id> 4 </person_skill_id>
</person_skill>
</person_data>
</person_database>
Теперь я хотел бы вывод, подобный следующему:
person_id,person_skill_name,person_skill_id
123456,Musician,1
123456,Chef,2
123456,Programmer,3
654321,Musician,1
654321,Chef,2
654321,Programmer,3
654321,Doctor,4
Чтобы объяснить вывод, я бы хочу, чтобы person_id печатался несколько раз в несколько строк в зависимости от количества дочерних тегов person_skill, присутствующих в родительском теге person_data.
Теперь я использовал следующие логики c в xslt, как показано ниже:
<xsl:template match="/">
<xsl:for-each select="person_database/person_data">
<xsl:variable name="personId" select="person_id"/>
<xsl:for-each select="person_skill">
<xsl:value-of select="$personId"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="person_skill_name"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="person_skill_id"/>
<xsl:text> </xsl:text>
</xsl:for-each>
</xsl:for-each>
<xsl:apply-templates/>
</xsl:template>
Но это не работает. Подскажите, пожалуйста, что не так?