0

我有以下源 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>]/*"  />
4

1 回答 1

2

使用current()/@select. 或者更好地定义一个 key<xsl:key name="k1" match="component" use="@name"/>和 do <xsl:apply-templates select="key('k1', @select)"/>

于 2012-05-16T11:16:02.300 回答