XSLT — выводит значение тега, но игнорирует дочерние теги

#xml #xslt

#xml #xslt

Вопрос:

Я пытался печатать только «argento» с помощью <xsl:value-of select=».» /> но он также печатает значения дочерних элементов, чего я пытаюсь избежать, поскольку в основном мне нужно только первое слово.

это XML-документ, который у меня есть

 <elenco-metalli>
<metallo id='1'> 
    argento
    <simbolo>
        Ag 
    </simbolo>
    <etimologia>
        dal latino:  Argentum
    </etimologia>
    <tipo comune='no'>
    <definizione>
        numero atomico 47
    </definizione>
    <definizione informale='s'> 
        L'argento è un metallo di transizione tenero, bianco e lucido; l'argento è il migliore ...
    </definizione>
    </tipo>
</metallo>
  

я должен упомянуть, что я не могу изменить XML или шаблон

Это то, что я пробовал, наряду с другими запросами XPATH, такими как tring, чтобы получить первый элемент с помощью [.], но это либо печатает только первый элемент, либо буквально делает всю страницу пустой

 <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format">

<xsl:template match="elenco-metalli">
<html>
<head>
<title>Elenco dei metalli piu comuni</title>

</head>
<body>

    <table>
        <xsl:for-each select="metallo">
        <xsl:sort select="./@id" data-type="number" />

            <tr>
                <th colspan="2"><xsl:value-of select="." /></th>
            </tr>
            <tr>
                <td>Etimologia:</td>
                <td><xsl:value-of select="definizione" /><xsl:value-of select="etimologia" /></td>
            </tr>
            <tr>
                <td>Definizione: <xsl:value-of select="definizione" /></td>
                <td>
                    <ul>
                        <xsl:for-each select="definizione">
                            <li>
                                <xsl:value-of select="definizione" />
                            </li>
                        </xsl:for-each>
                    </ul>
                </td>
            </tr>
            <tr>
                <td id="spacer" colspan="2"></td>
            </tr>
        </xsl:for-each>
    </table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
  

я искал везде в Интернете, но безуспешно, возможно, я задавал неправильные вопросы, но я даже не уверен, какие из них будут правильными

Ответ №1:

Ваша инструкция:

 <xsl:value-of select="." />
  

возвращает содержимое всех дочерних текстовых узлов текущего metallo . Если вам нужен только первый дочерний текстовый узел, измените его на:

 <xsl:value-of select="text()[1]" />