我已经检查了多个帖子,这里添加了exclude-result-prefixes,也试过说明了
<xsl:template match="pc:*" priority="-0.2">
<xsl:element name="{local-name()}">
<xsl:copy-of select="*"/>
</xsl:element>
</xsl:template>
我尝试过的所有这些方法,但命名空间前缀仍未被删除。
有人可以帮我解决如何删除命名空间并将其放在最上面
例如:
Input xml
<Workstart>
<Work/>
</Workstart>
XSLT
<xsl:stylesheet version="1.0" xmlns:pc="http://schemas.microsoft.com/office/infopath/2007/PartnerControls" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" exclude-result-prefixes="pc">
<xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="Work">
<xsl:apply-templates select="@*"/>
<pc:test1/>
</xsl:template>
</xsl:stylesheet>
必需输出xml
<Workstart xmlns:pc="http://schemas.microsoft.com/office/infopath/2007/PartnerControls" >
<Work>
<pc:test1/>
</Work>
</Workstart>
答案 0 :(得分:0)
回复您编辑过的问题:
以下样式表:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:pc="http://schemas.microsoft.com/office/infopath/2007/PartnerControls">
<xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/Workstart">
<Workstart>
<xsl:apply-templates select="@* | node()" />
</Workstart>
</xsl:template>
<xsl:template match="Work">
<xsl:copy>
<xsl:apply-templates select="@* | node()" />
<pc:test1/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
应用于新的输入示例时:
<Workstart>
<Work/>
</Workstart>
将返回以下结果* :
<Workstart xmlns:pc="http://schemas.microsoft.com/office/infopath/2007/PartnerControls">
<Work>
<pc:test1/>
</Work>
</Workstart>
-
(*)正如我之前提到的,完全结果可能取决于您的特定处理器。