我有这段代码,无法编辑它:
<elenco-treni>
<treno id='1'> Moderno
<percorso>Terni - Spoleto</percorso>
<tipo genere='locale'> aaa
<fermata>Narni</fermata>
<fermata informale='s'>Giano</fermata>
</tipo>
</treno>
<treno id='5' codice='G140'> Jazz
<percorso>Orte - Terontola</percorso>
<tipo genere='regionale'>
<fermata>Terni</fermata>
<fermata>Spoleto</fermata>
<fermata>Foligno</fermata>
<fermata>Assisi</fermata>
<fermata>Perugia</fermata>
</tipo>
</treno>
</elenco-treni>
我遇到了一些问题:
1)当我选择&#34; elenco-treni&#34;,一切都不起作用
<xsl:for-each select="elenco-treni">
<xsl:value-of select="treno"/>
给我空白的结果。
2)我无法获得tipo的价值&#34; aaa&#34;
<xsl:for-each select="treno">
<xsl:value-of select="tipo"/>
给了我所有的&#34; tipo&#34;孩子及其价值。
答案 0 :(得分:0)
这是设计糟糕的XML,因为它使用混合内容(具有文本节点和其他元素作为子元素的元素),其混合内容未被设计为使用。如果混合内容使用得当,xsl:value-of work的构造很好,但它们在这种输入上不能很好地工作。
当您处理设计糟糕的XML时,最好的方法是首先将其转换为更干净的东西。你可以在这里用一个包装元素中文本节点的转换来做到这一点:
<xsl:template match="treno/text()[normalize-space(.)]">
<veicolo><xsl:value-of select="normalize-space(.)"/></veicolo>
</xsl:template>
这只需要包装非空白文本节点。