匹配如何在xsl模板中工作?

时间:2016-04-19 05:21:55

标签: xml xslt wsdl xslt-1.0 xslt-2.0

我有一个像这样的xsl:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
                xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
                version="1.0">

    <xsl:template match="wsdl:definitions">
        <!-- code here -->
    </xsl:template>

</xsl:stylesheet>

在这个xsl中,这一行做了什么:

<xsl:template match="wsdl:definitions">

从我的理解,它将严格匹配wsdl:definitions标签,就像给定xml中的<wsdl:definitions>一样(如果我错了,请纠正我)。

但是当时我真的很困惑,我给这个输入xml:

<xxx:definitions xmlns:xxx="http://schemas.xmlsoap.org/wsdl/" xmlns:xxxx1="http://www.w3.org/2006/05/addressing/wsdl"  >
</xxx:definitions>

它仍匹配<xxx:definitions>并根据需要进行转换。如果在我的xsl表单中我给它匹配wsdl:definitions,这怎么可能呢?匹配是否与给定输入xml的xmlns有关?

1 个答案:

答案 0 :(得分:1)

名称空间前缀只是URI的名称。如果URI匹配,则名称空间是相同的。 xmlns为URI添加前缀。在单个文档中甚至可以有相同名称空间的许多前缀。

因此,您可以使用您想要的名称空间前缀,并且XSL将始终正确匹配它们。这将有助于源自不同来源的文档,不需要使用相同的前缀,仍然可以理解。