我有以下 xml 代码:
<OML>
<bg-def xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="EX1"/>
</OML>
我想使用 XSLT 删除属性xmlns:xsi及其值,因此结果将如下所示:
<OML>
<bg-def name="EX1"/>
</OML>
我尝试使用以下 XSLT 代码执行此操作:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns:ex="http://exslt.org/dates-and-times" extension-element-prefixes="ex">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="no" xml:space="preserve"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="bg-def|@ xmlns:xsi"/>
</xsl:transform>
在我写完代码之前,我的编辑器警告我:“ W Namespace prefix xmlns has not been declared ”。当我删除表达式:xsi并只写xmlns时,没有更多警告。但是当我编译并执行我的程序时,什么也没有发生,我也没有得到预期的输出。我还尝试使用以下内容更改我的 xslt 文件的最后一行:
<xsl:template match="bg-def|@ name"/>
那么结果是这样的:
<OML>
<bg-def xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
</OML>
这意味着,属性名称已被很好地删除。但我想用属性xmlns:xsi做到这一点。有人可以帮我这样做吗?谢谢你的帮助。弗兰奇