大家好!
我正在尝试使用 XSL 1.0 来转换 XSD,但我在初始化变量时遇到了问题。
语境
好吧,这是我初始化变量的代码:
<xsl:variable name="gNS">
<xsl:call-template name="get_global_NS">
<xsl:with-param name="type" select="$main_type"/>
<xsl:with-param name="class_type" select="$class"/>
</xsl:call-template>
</xsl:variable>
现在,模板get_global_NS
代码:
<xsl:template name="get_global_NS">
<xsl:param name="type"/>
<xsl:param name="class_type"/>
<xsl:variable name="prefix" select="substring-before($type,':')"/>
<xsl:choose>
<xsl:when test="$prefix = 'b'">
<xsl:value-of select="$ns_base"/>
</xsl:when>
<xsl:otherwise>
<xsl:choose>
<xsl:when test="$prefix = 'c'">
<xsl:value-of select="$ns_conceptuels"/>
</xsl:when>
<xsl:otherwise>
<xsl:choose>
<xsl:when test="$prefix = 'd' and contains($class_type,'A5')">
<xsl:value-of select="$ns_dom_a5"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$ns_dom_vega"/>
</xsl:otherwise>
</xsl:choose>
</xsl:otherwise>
</xsl:choose>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
变量$ns_base
、$ns_conceptuels
和$ns_dom_a5
被$ns_dom_vega
定义为全局变量。所有这些都使用文档节点进行初始化。以下行是 的初始化ns_base
:
<xsl:variable name="ns_base" select="document('../Types/Base.xsd')"/>
问题
好吧,当我在调用其他命名模板时尝试使用gNS
变量来选择节点时,我遇到了问题。它是一个节点片段而不是一个节点。
在这里,麻烦点:
<xsl:call-template name="write_type">
<!--
This temaplate process a xs:simpleType or xs:complexType named like the mainType.
Due to the main_type has a namespace prefix, I get the actual name calling
substring-after() function
-->
<xsl:with-param name="type_elem" select="$gNS//*[@name=substring-after($main_type,':')]"/>
<xsl:with-param name="fed_type" select="$type"/>
</xsl:call-template>
问题就在这个选择中:select="$gNS//*[@name=substring-after($main_type,':')]"
。$gNS
只是一个节点片段:(
提前致谢!如果有人需要更多信息,请向我索取!