0

xml ファイル内の一致するすべてのノードを置き換えたかったのです。

元の xml に:

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <StackPanel>
    <Button/>
  </StackPanel>
</Window>

次の xslt を適用しました。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()" />
        </xsl:copy>
    </xsl:template>

    <xsl:template match="Button">
        <AnotherButton><xsl:apply-templates select="@*|node()" /></AnotherButton>
    </xsl:template>    
</xsl:stylesheet>

しかし、それは同じxmlを生成します。私は何を間違えましたか?

4

1 に答える 1

3

Seanが言っているのは、XMLドキュメントから名前空間を削除すると、XSLTが機能するということです。

<Window>
  <StackPanel>
    <Button/>
  </StackPanel>
</Window>

生成します...

<Window>
    <StackPanel>
        <AnotherButton />
    </StackPanel>
</Window>

または、名前空間を保持できるかどうかを尋ねました

x:ボタンに名前空間を追加します...

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <StackPanel>
    <x:Button/>
  </StackPanel>
</Window>

x:Buttonこの名前空間も使用するようにXSLを更新します

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()" />
        </xsl:copy>
    </xsl:template>

    <xsl:template match="x:Button">
        <x:AnotherButton><xsl:apply-templates select="@*|node()" /></x:AnotherButton>
    </xsl:template>    
</xsl:stylesheet>

生成します...

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <StackPanel>
        <x:AnotherButton/>
    </StackPanel>
</Window>
于 2012-08-10T08:27:06.000 に答える