2016-04-19 71 views
0

我有這樣一個xsl:匹配如何在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(糾正我,如果我在這裏錯了)。

但我是從字面上糊塗的那一刻,我給這個輸入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

命名空間前綴只是URI的名稱。如果URI匹配,則命名空間是相同的。 xmlns向URI添加一個前綴。在單個文檔中甚至可以有相同名稱空間的許多前綴。

所以你被允許使用您想要的任何名稱空間前綴和XSL將始終正確匹配。這將有助於來自不同來源的文檔不需要使用相同的前綴並仍然被理解。

+0

因此,由於URI'http:// schemas.xmlsoap.org/wsdl /'匹配它的兩個文檔,對吧?這與'match'無關,對吧? –

+0

@ Ant的是的。由於兩者都具有該URI的前綴,因此匹配會認爲它們相等。 –

+0

非常感謝,現在有道理! –