【发布时间】:2025-11-24 22:10:01
【问题描述】:
我在这里检查了多个帖子添加了排除结果前缀,也尝试了指定
<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>
【问题讨论】:
-
为什么你需要的输出没有前缀
pc的命名空间声明?这是一个无效的 XML。<Work> <test1/> </Work>有道理 -
它只是从一个 xml 到另一个 xml 的转换
-
而且您的输出不是有效的 XML! XML 不能包含未声明的前缀。您的输出有
pc前缀,它不与任何命名空间相关联。 -
您的“test1”节点属于一个特定的命名空间,该命名空间由您提供的前缀表示。你不能去掉一个节点的命名空间,仍然通过前缀说一个特定的节点属于一个特定的命名空间
标签: xslt namespaces