путаница шаблона xslt по умолчанию для корневого узла - PullRequest
0 голосов
/ 13 сентября 2018

Один из шаблонов по умолчанию в xslt:

 <xsl:template match="*|/">
     <xsl:apply-templates/>
 </xsl:template>

Почему шаблон соответствия содержит выражение для корневого узла "/"? Звездочка "*" не захватывает уже все узлы в документе?

Я пытался пропустить это, и не было никакой разницы. Подписан на xslt

<xsl:stylesheet 
     version="2.0"
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:output method="xhtml" indent="yes"/>

    <xsl:template match="*">
        <xsl:value-of select="./name()"/>
        <xsl:apply-templates/>
    </xsl:template>

</xsl:stylesheet>

и следующий xml

<?xml version="1.0" encoding="UTF-8"?>

<a>
    <b>
    </b>
</a>

производит вывод:

<?xml version="1.0" encoding="UTF-8"?>a
b

Итак, корневой узел a захвачен.

1 Ответ

0 голосов
/ 13 сентября 2018

Поскольку осью по умолчанию для пути местоположения является child, *|/ - это просто сокращение для child::*|/child::* не соответствует корневому узлу документа, только его дочерние элементы.

...