请告诉我如何使用动态调用输出元素的文本
源XML<GTD>
<LINE>
<G44>
<G441>
02015
</G441>
<G442>
12345
</G442>
</G44>
</LINE>
</GTD>
我的xsl转换
<xsl:template match="/">
<GTD>
<LINE>
<VAR_1_1>
<xsl:apply-templates select="../G44[G441 = '02015' or G441 = '02016' or G441 = '02017']">
<xsl:with-param name="field" select="G441" />
</xsl:apply-templates>
</VAR_1_1>
<VAR_1_2>
<xsl:apply-templates select="../G44[G441 = '02015' or G441 = '02016' or G441 = '02017']">
<xsl:with-param name="field" select="G442" />
</xsl:apply-templates>
</VAR_1_2>
</LINE>
</GTD>
</xsl:template>
<xsl:template match="G44[G441 = '02015' or G441 = '02016' or G441 = '02017']">
<xsl:param name="field"/>
<xsl:value-of select="$field" />
</xsl:template>
我确实知道<xsl:value-of select="$field" />
会给我变量的值,而不是名称等于变量值的元素的值。
首先,您的参数将始终为空,因为您处于/
根元素的上下文中,并且您正在选择一个节点。没有G441
元素是/
根节点的子元素,因此您没有选择任何内容。
你要做的是,你需要发送一个字符串作为参数,例如
<xsl:with-param name="field" select="'G441'" />
,然后提取值为:
<xsl:value-of select="*[name()=$field]" />
还要注意:
<xsl:apply-templates select="../G44[G441 = '02015' or G441 = '02016' or G441 = '02017']">
也不做任何事情。我想你的意思是:
<xsl:apply-templates select=".//G44[G441 = '02015' or G441 = '02016' or G441 = '02017']">
或(最好):
<xsl:apply-templates select="GTD/LINE/G44[G441 = '02015' or G441 = '02016' or G441 = '02017']">
恕我直言,您可以将整个内容简化为:
<xsl:template match="/GTD">
<GTD>
<LINE>
<xsl:variable name="g44" select="LINE/G44[G441='02015' or G441='02016' or G441='02017']" />
<VAR_1_1>
<xsl:value-of select="$g44/G441" />
</VAR_1_1>
<VAR_1_2>
<xsl:value-of select="$g44/G442" />
</VAR_1_2>
</LINE>
</GTD>
</xsl:template>