我有以下源xml
<forms>
<x>
<y>
<x-component select="foobar" />
</y>
</x>
<component name="foobar">
<some>
<component>
<value>text</value>
</component>
</some>
</component>
</forms>
我正在尝试将其转换为以下内容:
<?xml version="1.0" encoding="UTF-8"?>
<forms>
<x>
<y>
<component name="foobar">
<some>
<component>
<value>text</value>
</component>
</some>
</component>
</y>
</x>
</forms>
我的xsl文件是
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:template match="x-component">
<yoba>
<xsl:attribute name="z">
<xsl:value-of select="@select"/>
</xsl:attribute>
<xsl:apply-templates select="/forms/component[@name=@select]/*" />
</yoba>
</xsl:template>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/">
<xsl:apply-templates select="*"/>
</xsl:template>
</xsl:stylesheet>
如何为此行传递当前节点的select
属性的值(而不是PLACEHOLDER):
<xsl:apply-templates select="/forms/component[@name=<PLACEHOLDER>]/*" />
答案 0 :(得分:2)
使用current()/@select
。或者更好地定义键<xsl:key name="k1" match="component" use="@name"/>
和do <xsl:apply-templates select="key('k1', @select)"/>
。