Как распечатать определенный тег в зависимости от количества дочерних тегов, используя xslt - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть 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>&#10;</xsl:text>  
</xsl:for-each>

</xsl:for-each>
        <xsl:apply-templates/>
    </xsl:template>

Но это не работает. Подскажите, пожалуйста, что не так?

...