xslt名称空间前缀未被删除

时间:2014-12-03 08:56:09

标签: xslt namespaces

我已经检查了多个帖子,这里添加了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>

1 个答案:

答案 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>

-
(*)正如我之前提到的,完全结果可能取决于您的特定处理器。