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ます。<xsl:key name="k1" match="component" use="@name"/>または、より適切にキーと do を定義します<xsl:apply-templates select="key('k1', @select)"/>

于 2012-05-16T11:16:02.300 に答える