Problema sta dva.
Problem št. 1: Pri prvi kodi je problem v tem, da loop-aš po DescriptionType namesto po PropertyDescription. Ker potem DescriptionText ni child od DescriptionType-a, ti vrne prazno vrednost za DescriptionText. Kar ti pri drugi varianti sicer uspe, ampak potem se pa znajdeš pred 2. problemom.
Problem št. 2: je pa v tem, da je XML naravnost debilen. Problem je v DescriptionType-u. Če je že avtor XML-ja hotel izpostaviti tip opisa, potem bi ga lahko navedel kot atribut (xml varianta 1):
<PropertyDescription DescriptionType="4">
<DescriptionText>...</DescriptionText>
</PropertyDescription>
ali pa kot polje (xml varianta 2):
<PropertyDescription>
<DescriptionText>...</DescriptionText>
<DescriptionType>4</DescriptionType>
</PropertyDescription>
ali konec koncev vse skupaj precej krajše (brez DescriptionText) takole:
<PropertyDescription DescriptionType="4">...</PropertyDescription>
Predlagam ti, da s kakim editorjem in uporabo search/replace popraviš vrstice z DescriptionType iz
<PropertyDescription DescriptionType="4">...</PropertyDescription>
v
<DescriptionType>4</DescriptionType>
V tem primeru (glej xml varianta 2) bo XSLT koda za izpis naslednja:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="PropertyDescriptions">
<xsl:for-each select="PropertyDescription">
<xsl:element name="table{DescriptionType}">
<xsl:value-of select="DescriptionText" />
</xsl:element>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Izvirni greh je torej XMLju "iz tujine" (Saturn, Jupiter?) in ne toliko v "domačem" XSLTju... :)