我有一个XML文档(由WiX heat生成),我想在删除属性时删除根元素名称。源树看起来像这样
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Fragment>
<DirectoryRef Id="HELP" />
</Fragment>
</Wix>
我想出了如何重命名节点,但这并没有删除不必要的属性xmlns
。
<xsl:template match='/wix:Wix'>
<Include>
<xsl:copy-of select="@*|node()"/>
</Include>
</xsl:template>
<!-- Even this template doesn't suppress the attribute xmlns -->
<xsl:template match='@xmlns'/>
我的事件从select子句中删除了@*|
。但这没有任何影响。
如何使用XSLT 1.0生成以下所需的输出?
<Include>
<Fragment>
<DirectoryRef Id="HELP" />
</Fragment>
</Include>
答案 0 :(得分:1)
这并不会删除不必要的属性
xmlns
。
xmlns
不是属性 - 它是名称空间,是节点名称的一部分。如果您不想在输出中使用它,则无法复制命名空间中的输入节点 - 您必须改为创建新节点,例如:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:wix="http://schemas.microsoft.com/wix/2006/wi"
exclude-result-prefixes="wix">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/wix:Wix">
<Include>
<xsl:apply-templates/>
</Include>
</xsl:template>
<xsl:template match="*">
<xsl:element name="{local-name()}">
<xsl:copy-of select="@*"/>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>