我正在嘗試對XML文檔進行轉換。我的XML變換可導致兩種不同類型的底座元件的取決於特定元素的值:空白xmlns =「」來自導入的屬性
<StructureA xmlns="http://...">
StructureA &:
<xsl:template match="/">
<xsl:choose>
<xsl:when test="/databean/data[@id='pkhfeed']/value/text()='200'">
<xsl:call-template name="StructureA">
<xsl:with-param name="structure" select="//databean" />
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="StructureB">
<xsl:with-param name="structure" select="//databean" />
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
StructureA或StructureB然後用自己的命名空間和schemaLocations創建B共享一些共同的元素,因此這些元素被定義在一個名爲「xmlcommon.xslt」的單獨文件中,這兩個結構都包含來自這些模板的文件。這個xmlcommon文件沒有定義默認名稱空間,因爲我希望它可以從StructureA或StructureB中定義的名稱空間使用。但是,當我跑我的改造,任何模板空白的xmlns從普通文件結果拉到屬性:
<StructureA xmlns="http://...">
<SharedElement xmlns="">Something</SharedElement>
</StructureA>
驗證時,空白的命名空間則用來代替正確的父之一。 有誰知道我可以通過添加這些空白xmlns屬性來阻止我的公共文件中的模板嗎?
下面是從普通文件的片段:
<xsl:stylesheet version="1.0" xmlns:fn="http://www.w3.org/2005/02/xpath-functions" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template name="ControlledListStructure">
<xsl:param name="xmlElem" />
<xsl:param name="structure" />
<xsl:element name="{$xmlElem}">
<!-- Blah blah blah -->
</xsl:element>
</xsl:template>
</xsl:stylesheet>
很好的解釋,埃文。沒有更多要補充的。從我+1。歡迎來到SO。 – 2009-04-30 13:29:42