Html XSLT如何仅选择包含子元素的元素的值

Html XSLT如何仅选择包含子元素的元素的值,html,xml,xslt,Html,Xml,Xslt,我有此代码,无法编辑它: <elenco-treni> <treno id='1'> Moderno <percorso>Terni - Spoleto</percorso> <tipo genere='locale'> aaa <fermata>Narni</fermata> <fermata informale='s'>Giano</ferma

我有此代码,无法编辑它:

<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>
我遇到了一些问题:

当我选择elenco treni时,一切都不起作用 给我一个空白的结果

我无法得到tipo的值,它是aaa
给我所有tipo子元素及其值。

这是一种设计糟糕的XML,因为它使用了混合内容元素,这些元素同时具有文本节点和其他元素作为子元素,而混合内容不是设计用来使用的。如果正确使用混合内容,则xsl:value之类的构造可以很好地工作,但它们在这种输入上不能很好地工作

当您处理设计糟糕的XML时,最好从将其转换为更干净的东西开始。您可以在这里通过将文本节点包装到元素中的转换来实现这一点:

<xsl:template match="treno/text()[normalize-space(.)]">
  <veicolo><xsl:value-of select="normalize-space(.)"/></veicolo>
</xsl:template>
这只需要包装非空白文本节点