Может быть разница, если задействованы пространства имен. name()
вернет любой префикс пространства имен в XML. И title
будет соответствовать только элементам title
без пространства имен или в пространстве имен, указанном xpath-default-namespace
в XSLT (при использовании XSLT 2.0).
Рассмотрим этот придуманный XML
<titles>
<title id="1" />
<title id="2" xmlns="test2" />
<test3:title id="3" xmlns:test3="test3" />
</titles>
Шаблон, соответствующий просто title
, будет соответствовать только первому, но *[name() = 'title']
будет соответствовать первым двум. Таким образом, в этом случае title
все еще избыточен в вашем совпадении.
Однако в XSLT 2.0 вы можете использовать xpath-default-namespace
в таблице стилей, чтобы указать пространство имен по умолчанию для нефиксированных элементов в выражении.
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xpath-default-namespace="test3">
В этом случае шаблон, соответствующий title
, будет соответствовать третьему title
в XML (<test3:title id="3" xmlns:test3="test3" />
), но шаблон, соответствующий *[name() = 'title']
, будет соответствовать первым двум.
Обратите внимание, есть также local-name()
, который возвращает только имя узла без префикса пространства имен, поэтому выполнение *[local-name() = 'title']
будет соответствовать всем трем title
элементам.