我有一个像这样的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
有关?
答案 0 :(得分:1)
名称空间前缀只是URI的名称。如果URI匹配,则名称空间是相同的。 xmlns
为URI添加前缀。在单个文档中甚至可以有相同名称空间的许多前缀。
因此,您可以使用您想要的名称空间前缀,并且XSL将始终正确匹配它们。这将有助于源自不同来源的文档,不需要使用相同的前缀,仍然可以理解。