XSLT:是否可以使用结果标记值来计算下一个标记?

时间:2015-09-14 09:37:47

标签: xml xslt

鉴于我们有一些XSLT转换,它将XML A转换为XML B.

在此过程中,我们的转换基于一些规则填充了一些字段B.a.

在此之后我们想要填充B.b.但该场地人口的规则是基于B.a值!因此,我们需要这样做是一种连续的方式,并在下一次计算中使用B.a值。

是否可以在XSLT中使用?

1 个答案:

答案 0 :(得分:1)

基本上,它归结为遵循这种模式:

<xsl:template match="/">
   <!-- get the result -->
   <xsl:copy-of select="$b.b" />
</xsl:template>

<xsl:variable name="$b.a">
    <xsl:apply-templates select="doc('a.xml')" mode="a" />
</xsl:variable>

<xsl:variable name="$b.b">
    <xsl:apply-templates select="doc('b.xml')" mode="b" />
</xsl:variable>

<xsl:template match="some/node/in/a" mode="a">
   <!-- do your thing here -->
</xsl:template>

<xsl:template match="some/node/in/b[$b.a/based/on/a[@x]]" mode="b">
   <!-- do your thing here -->
</xsl:template>

如果您因某些原因而不幸遇到XSLT 1.0,请在重新应用节点时对变量使用exslt:node-set()。此外,您必须在选择中而不是(首选)匹配模板模式表达式中区别于此情况,因为XSLT 1.0中的模式不能使用变量引用。