我想替换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。我做错了什么?
答案 0 :(得分: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>
更新您的XSL以使用此x:Button
命名空间
<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>