XML ドキュメントを変換しようとしています。私の XML 変換は、特定の要素の値に応じて、2 つの異なるタイプの基本要素になる可能性があります。
<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>
その後、独自の名前空間と schemaLocation を使用して StructureA または StructureB が作成されます。
<StructureA xmlns="http://...">
StructureA と 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>