Xslt XSL:按元素匹配与按元素名称匹配相同吗?
我的公司给了我一个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: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">