我是xslt的新手,现在我已经没想到了。希望你偷看可以帮助我回到正轨。
鉴于从第三方传递给我们的以下XML:
<orderbatch>
<orders>
<order>
<id>1</id>
<customerid>2001</customerid>
<articleid>345</articleid>
</order>
</orders>
<customers>
<customer>
<id>2001</id>
<name>John Smith</name>
</customer>
</customers>
</orderbatch>
如果我想通过xslt在订单节点下移动相应的客户节点,以获得此输出:
<orderbatch>
<orders>
<order>
<id>1</id>
<customerid>2001</customerid>
<articleid>345</articleid>
<customer>
<id>2001</id>
<name>John Smith</name>
</customer>
</order>
</orders>
<customers>
<customer>
<id>2001</id>
<name>John Smith</name>
</customer>
</customers>
</orderbatch>
我有一个具有固定值的工作xslt,但我有点不知道如何参数化它:
<xsl:output method="xml"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:key name="customerList" match="/orderbatch/customers/customer" use="id"/>
<xsl:template match="order">
<xsl:copy>
<xsl:value-of select="id"/>
<customer>
<xsl:value-of select="key('customerList', '2001')"/>
</customer>
</xsl:copy>
</xsl:template>
由于某种原因,我不能使用xsl:variable,current()/ customerid而不是'2001',因为这会导致订单节点处的空节点(而客户列在客户列表中)。那么,问题是,如何在复制块的选择中参数化'2001'? (或者我在这里做错了什么?)
答案 0 :(得分:0)
要复制您的客户,请不要使用value-of而是copy-of。
<xsl:template match="order">
<xsl:copy>
<xsl:copy-of select="customerid"/>
<xsl:copy-of select="key('customerList', customerid)" />
</xsl:copy>
</xsl:template>
BTW,current()在这里不是必需的,因为order是上下文节点。