【发布时间】:2018-03-19 14:08:38
【问题描述】:
我正在尝试理解一个工作项目的一段 XSLT 代码,但我无法弄清楚什么调用了什么以及如何正确传递值。
我有这段代码,它使用 apply-templates 元素来选择文档类型元素中的第一个元素:
<xsl:apply-templates select="DocumentType[string(text())][1]" mode="XmlString">
<xsl:with-param name="name" select="'DocumentType'"/>
</xsl:apply-templates>
然后将一个参数传递到模板中,该模板分配正确的值。 with-param 中的 name 属性与此处的 param 元素匹配:
<xsl:template match="*" mode="XmlString">
<xsl:param name="name"/>
<!-- Check the "name" parameter : madantory / optional -->
<xsl:call-template name="MandatoryOrOptional">
<xsl:with-param name="name" select="$name"/>
<xsl:with-param name="value" select="."/>
</xsl:call-template>
</xsl:template>
但我不确定为什么以及如何传递该值。每当需要映射一个值时,它会在整个映射中重复使用。
通常我只会创建所需的标签并使用 xsl:value-of 元素从源文档中获取我想要的值。如果有人能告诉我这段代码在实践中是如何工作的,我将不胜感激。有几次我使用 apply-templates,我已经在我的 XSLT 中定义了一个模板,然后使用 match 属性来应用它。
【问题讨论】:
-
这不是设计师会做的事情。这是你真的需要复制的模式吗?也许最初的开发者试图变得太聪明以至于其他人无法效仿。 :(
-
第一个语句是什么意思?是的,如果可能,我想复制这种模式,因为它被广泛使用。
-
我的意思是这不是 BizTalk Mapper 会做的事情。
标签: xml xslt biztalk biztalk-mapper