Xslt XSL:按元素匹配与按元素名称匹配相同吗?

Xslt XSL:按元素匹配与按元素名称匹配相同吗?,xslt,Xslt,我的公司给了我一个XSL文件,以便我的部门使用。在该文件中有如下行: <xsl:template match="title | *[name() = 'title' or contains(@class, '/title ')]"> 据我所知,match=“title”与match=“*[name()='title']”相同,这将使初始的title多余。但是,该文件最初是由专门从事XML/XSL/HMTL开发的第三方编写的,因此我认为它的存在是有原因的?如果涉及名称空间,可能会

我的公司给了我一个XSL文件,以便我的部门使用。在该文件中有如下行:

<xsl:template match="title | *[name() = 'title' or contains(@class, '/title ')]">


据我所知,
match=“title”
match=“*[name()='title']”
相同,这将使初始的
title
多余。但是,该文件最初是由专门从事XML/XSL/HMTL开发的第三方编写的,因此我认为它的存在是有原因的?

如果涉及名称空间,可能会有所不同
name()
将返回XML中的任何名称空间前缀。而
title
将只匹配无命名空间中的
title
元素,或在XSLT中由
xpath默认命名空间指定的命名空间中的元素(如果使用XSLT 2.0)

考虑一下这种人为设计的XML

<titles>
    <title id="1" />
    <title id="2" xmlns="test2" />
    <test3:title id="3" xmlns:test3="test3" />
</titles>
在这种情况下,匹配
title
的模板将匹配XML中的第三个
title
),但匹配
*[name()=“title']
的模板将匹配前两个

注意,还有一个
local-name()

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xpath-default-namespace="test3">